是否有一种方法来重新绑定一个函数,已经绑定到另一个对象通过function .prototype.bind?
var a={};
var b={};
var c=function(){ alert(this===a); };
c(); // alerts false
c=c.bind(a);
c(); // alerts true
c=c.bind(b);
c(); // still alerts true
我知道我可以使用一种不同的方法,并保持一个"干净"的函数来绑定,但我只是想知道如何重用一个已经绑定的函数。
是否有一种方法来重新绑定一个函数,已经绑定到另一个对象通过function .prototype.bind?
。来自ES2015规范关于Function.prototype.bind
:
19.2.3.2 bind (thisArg…args)
[…]
注2:如果Target是一个箭头函数或绑定函数,则传递给此方法的thisArg将不会在后续调用F时使用。
.bind()
所做的几乎与此相同:
function likeBind(fun, thisValue) {
return function() {
var args = [].slice.call(arguments, 0);
return fun.apply(thisValue, args);
};
}
:
c = likeBind(c, a);
给出了一个有界函数。现在,即使您尝试重新绑定,原始绑定函数仍然存在于该闭包中,并且您最初请求使用的值为this
。闭包内部的变量值只能在闭包内部进行更改,因此您无法像这样解除绑定一个绑定函数。你必须从原来的功能重新开始。
, 。