Javascript函数bind override(如何将其绑定到另一个对象)



是否有一种方法来重新绑定一个函数,已经绑定到另一个对象通过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。闭包内部的变量值只能在闭包内部进行更改,因此您无法像这样解除绑定一个绑定函数。你必须从原来的功能重新开始。

没有

,

最新更新