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'); //pppa.say.apply(c, ['ppp']); //pppa.say.bind(c, 'ppp')(); // ppp
总结:
- apply 、 call 、bind 三者第一个参数都是this要指向的对象,也就是想指定的上下文。都可以利用后续参数传参;
- call 和 apply 是指定this和参数调用这个函数,立即执行这个函数。bind 固定某个函数的参数和this 返回函数
callapply的区别是他们指定参数的方式不同
使用场景:
- call : 继承
- apply:经常跟数组有关系,比如借助于数学对象实现数组最大值最小值。
- bind:不调用函数,但是还想改变this指向,比如改变定时器内部的this指向。
