首先,js中call,apply,bind方法它们都有一个相同点:更改函数中this的指向例如:
原本this指向的是window中的color:red,但使用了call和apply,让他们的this指向了o,所以输出了blue;
那它们的不同点呢?
首先是传参不同,call后面的括号里可以第一个参数是自己所想要指向的this对象,后面的参数是函数所要传入的参数,并且它多用于函数的继承。例如:
而apply后面的括号里可以第一个参数也是自己所想要指向的this对象,后面的参数一定要是数组,即apply(this,['a','b']);
而bind是比较特殊的一个,它不像call,apply一样调用了之后,函数立马执行,它是返回一个新的函数,只不过新的函数中this指向已经改变了。
bind括号后面的第一个值也是this指向的对象,其余的是函数的参数。
总结:
call经常用做继承;
apply经常跟数组有关系,比如借助于数学对象实现数组最大值最小值;
bind不调用函数,但是还想改变this指向,比如改变定时器内部的this指向;