之前,你可以直接设置自我= =这这个或那个,等等,当然,它也可以发挥作用,但使用Function.prototype.bind()将更好更专业。
下面是一个简单的例子:

复制代码代码如下所示:
VaR myobj时= { {
特殊功能:功能(){
},
anotherspecialfunction:函数(){
},
getasyncdata:功能(CB){
(CB);
},
渲染:函数(){
var =;
this.getasyncdata(函数(){()
that.specialfunction();
that.anotherspecialfunction();
});
}
};
MyObj.render();

在这种情况下,为了保持myobj时的背景下,建立一个变量,这是可行的,但不使用Function.prototype.bind()看到它更整齐。
复制代码代码如下所示:
渲染:函数(){
this.getasyncdata(函数(){()
this.specialfunction();
this.anotherspecialfunction();
}绑定(这个);
}


当调用Bind()时,它只是创建一个新函数,然后将这个函数传递给函数。实现的代码。Bind()可能是相同的:
复制代码如下:function.prototype.bind =功能(范围){
这个=;
返回函数(){
返回fn.apply(范围);
};
}


这是一个简单的使用实例(Function.prototype.bind)。

复制代码代码如下所示:
var { { { {
X:3
};

函数(){()
(这console.log。x);
};

(bar);未定义的

无功boundfunc = bar.bind(Foo);

BoundFunc(3); / /


使用它很好吗不幸的是,IE8及以下的IE浏览器不支持Function.prototype.bind(),支持的浏览器是Chrome 7 + 4 + 9 + Firefox,IE,Opera 11.60 +,和Safari 5.1.4 +。虽然IE 8 / 7 / 6和其他浏览器不支持它,Mozilla开发组写了一功能类似于老版本的IE浏览器。代码如下:
复制代码代码如下所示:
如果(!函数.原型.绑定){
function.prototype.bind =功能(o){
如果(typeof这!=函数){
事情可能 / /亲密的ECMAscript 5内部iscallable功能
抛出TypeError(function.prototype.bind -什么是想肯定不是));
}

无功aargs = array.prototype.slice.call(参数1),
这ftobind =,
浮点空操作=函数(){ },
fbound =函数(){
返回ftobind.apply(这是浮点空操作流)
这
OThis,
AArgs.concat(array.prototype.slice.call(参数)));
};

fnop.prototype = this.prototype;
fbound.prototype =新的浮点空操作();

返回fbound;
};
}