js 中提供 了 call() bind() apply() 这3个方法 来改变this的指向
_
🌰:
function Person(name) {
this.name = name;
}
Person.prototype = {
sayName: function () {
console.log(this.name);
},
say: function (date) {
console.log(date);
}
};
const a = new Person('XXX');
const c = { name: 'SSSS' };
a.sayName.call(c); //SSSS
//call(this指向,参数) apply(this指向,[参数])
a.say.call(c, 'ppp'); //ppp
a.say.apply(c, ['ppp']); //ppp
a.say.bind(c, 'ppp')(); // ppp
总结:
- apply 、 call 、bind 三者第一个参数都是this要指向的对象,也就是想指定的上下文。都可以利用后续参数传参;
- call 和 apply 是指定this和参数调用这个函数,立即执行这个函数。bind 固定某个函数的参数和this 返回函数
call
apply
的区别是他们指定参数的方式不同
使用场景:
- call : 继承
- apply:经常跟数组有关系,比如借助于数学对象实现数组最大值最小值。
- bind:不调用函数,但是还想改变this指向,比如改变定时器内部的this指向。