JS中的apply(), call(), bind()方法

这三个关键字经常看到,但是从来没有做过详细的区分。或者说,每次用的时候看一眼,就继续专注在别的事情上去了。今天整理一下下。

首先,这三个方法的用法十分相似,都是用来改变函数运行时的上下文联系,其实就是改变this的指向。this引用的是函数执行的环境对象,就是调用this的时候才会去寻找它指向谁。

好,先说apply和call。

两者用法基本相同,用途是在特定的作用域中调用函数,接收的第一个参数是运行函数的作用域,如果call和apply的第一个参数是null, 那么this就指向了windows。

唯一的不同是apply传参数会一整个数组传入,而call则是一个个数值进行传递。

举个栗子呢:

banana.call(this, arg1, arg2);

banana.apply(this, [arg1, arg2]);

banana.apply(this, arguments); //传入arguments对象

那么当你要传的参数数量是确定的时候呢,用哪个都可以。

可是如果你有一个数组,但你不知道里面有多少个值,这时候就需要用apply,不可以用call。


apply()和call()的强大还在于能扩充函数运行的作用域,即对象和方法不需要有耦合关系。


那么bind呢,是创建了一个新函数,this值会被绑定到传给bind()函数的值

window.a = 1;

var obj = { a: 2};

function sayA() {alert(this.a);}

var newA = sayA.bind(o);

newA(); //2



不知道大家喜不喜欢看很多例子,我是有点懒得看一些长篇大论的。。这篇总结就简短的写在这里啦


参考:

http://www.admin10000.com/document/6711.html

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

友情链接更多精彩内容