一般apply()、call()和bind()会一起比较。
他们三个都是改变this对象指向的方法。
apply()和cal()方法是会立即执行,apply把参数作为数组,call方法接收一个一个的参数。
bind()就是绑定,会返回函数。
这是我之前的理解,太不深刻了。
比如说MDN上的这个例子:
this.x = 9; // 在浏览器中,this指向全局的 "window" 对象
var module = {
x: 81,
getX: function() { return this.x; }
};
module.getX(); // 81
var retrieveX = module.getX;
retrieveX();
// 返回9 - 因为函数是在全局作用域中调用的
// 创建一个新函数,把 'this' 绑定到 module 对象
// 新手可能会将全局变量 x 与 module 的属性 x 混淆
var boundGetX = retrieveX.bind(module);
boundGetX(); // 81
个人理解是还是要搞清楚this绑定的对象才行。
module.getX();这个语句里直接调用module对象的getX方法,this指向的就是module对象,这个对象里x为81.
var retrieveX = module.getX;这个语句里就是把getX函数当做一般函数调用,指向的就是调用它的对象retrieveX,而这个对象又是全局对象,所以指向的就是全局,x=9
var boundGetX = retrieveX.bind(module);
boundGetX(); // 81
bind()方法登场了,retrieveX可以理解为一个函数表达式吧(存疑),把这个函数里的this指向module对象,返回这个新函数给boundGetX,那么再调用boundGetX里面生成的this就指向的是module了。
https://developer.mozilla.org/zh-CN/docs/Web/JavaScript/Reference/Global_Objects/Function/bind
https://blog.csdn.net/YZ0826/article/details/80176169