bind 函数
bind 函数的作用是改变this的指向。(这里说的bind 不是jq的bind 函数。)
举个栗子:
var name = "outerName";
let obj = {
name: "innerName",
getName: function () {
return function () {
return this.name;
}
}
};
obj.getName()(); //"outerName"
(小提示: 这里的全局变量为什么不能用let: let 定义的变量不是全局变量,而调用函数时this指向全局window 。至于为什么可以看这里)
这里有2个解决方案:
1.在getName中定义一个 that 保存this .
getName: function () {
let that = this;
return function () {
return that.name;
}
}
2.使用apply或者call方法指定函数的作用域:
var name = "outerName";
let obj = {
name: "innerName",
getName: function () {
return function () {
return this.name;
}
}
};
let func = obj.getName();
alert(func.apply(obj)) //"innerName"
ES5 提供了新的bind方法可以更简介明朗的实现这种效果:
var name = "outerName";
let obj = {
name: "innerName",
getName: function () {
return function () {
return this.name;
}
}
};
let func = obj.getName();
func = func.bind(obj);
alert(func()) //"innerName"
对于少数浏览器不支持bind函数的兼容性操作:
Function.prototype.bind=Function.prototype.bind||
function(context){
var self=this;
return function()
{
return self.apply(context,arguments);
}
}