js 中提供 了 call() bind() apply() 这3个方法 来改变this的指向
_

🌰:

  1. function Person(name) {
  2. this.name = name;
  3. }
  4. Person.prototype = {
  5. sayName: function () {
  6. console.log(this.name);
  7. },
  8. say: function (date) {
  9. console.log(date);
  10. }
  11. };
  12. const a = new Person('XXX');
  13. const c = { name: 'SSSS' };
  14. a.sayName.call(c); //SSSS
  15. //call(this指向,参数) apply(this指向,[参数])
  16. a.say.call(c, 'ppp'); //ppp
  17. a.say.apply(c, ['ppp']); //ppp
  18. a.say.bind(c, 'ppp')(); // ppp

总结:

  • apply 、 call 、bind 三者第一个参数都是this要指向的对象,也就是想指定的上下文。都可以利用后续参数传参;
  • call 和 apply 是指定this和参数调用这个函数,立即执行这个函数。bind 固定某个函数的参数和this 返回函数
  • call apply 的区别是他们指定参数的方式不同


使用场景:

  • call : 继承
  • apply:经常跟数组有关系,比如借助于数学对象实现数组最大值最小值。
  • bind:不调用函数,但是还想改变this指向,比如改变定时器内部的this指向。