this、apply、call、bind
this
this
永远指向最后调用它的那个对象
apply、call 的区别
对于 apply、call 二者而言,作用完全一样,只是接受参数的方式不太一样。例如,有一个函数定义如下:
var func = function(arg1, arg2) {};
就可以通过如下方式来调用:
使用场景
参数明确使用call
,参数不明确使用apply
;
func.call(this, arg1, arg2);
func.apply(this, [arg1, arg2]);
bind
MDN
的解释是:bind()
方法会创建一个新函数,称为绑定函数,当调用这个绑定函数时,绑定函数会以创建它时传入 bind()方法的第一个参数作为 this
,传入 bind()
方法的第二个以及以后的参数加上绑定函数运行时本身的参数按照顺序作为原函数的参数来调用原函数。
总结
apply
、call
、bind
三者都是用来改变函数的this
对象的指向的;apply
、call
、bind
三者第一个参数都是 this 要指向的对象,也就是想指定的上下文;apply
、call
、bind
三者都可以利用后续参数传参;bind
是返回对应函数,便于稍后调用;apply
、call
则是立即调用.