简单测试的JavaScript.bind()方法

简单测试的JavaScript.bind()方法,javascript,prototype,bind,Javascript,Prototype,Bind,我想测试JavaScript.bind()方法,但我做错了-值(通过引用传递)没有增加,仍然是5 这是我的密码: function MyObject() { this.value = 5; } MyObject.prototype.add = function fn0() { return this.value++; } var ancestor = new MyObject(); function functionChanger(fnc, obj) { fnc.bind(obj

我想测试JavaScript.bind()方法,但我做错了-值(通过引用传递)没有增加,仍然是5

这是我的密码:

function MyObject() {
  this.value = 5;
}

MyObject.prototype.add = function fn0() {
  return this.value++;
}

var ancestor = new MyObject();

function functionChanger(fnc, obj) {
 fnc.bind(obj);
}

functionChanger(ancestor.add, ancestor);

我想要实现的正确版本

function functionChanger(fnc) {
 fnc();
}

functionChanger(ancestor.add.bind(ancestor));

bind
返回一个新的函数。您没有将其分配给任何对象。

我认为您需要或:

请注意,这会创建一个函数,因此您也可以使用(不推荐):


我想你也可以试试这个..

function functionChanger(fnc, obj) {
    let bindfunc = fnc.bind(obj);
    bindfunc();
}

bind使用新上下文创建一个新函数,其中是
bind
?。请在functionChanger()中发布完整的代码。{…}您在哪里调用add?Bind只是创建了一个绑定到对象的新方法,而该对象没有调用它。他为什么要在一个名为
functionChanger
的函数中调用该函数?@JanDvorak,因为如果你既不调用函数,也不将其存储在变量中,那么创建函数是毫无意义的。然后,我猜cachaito想调用该函数。我从snook.ca/archives/javascript/javascript\u pass中学到了这一点,并注意到Sam Minee的第一条评论,其中是bind()的解决方案。
function functionChanger(fnc, obj) {
    fnc.bind(obj)();
}
function functionChanger(fnc, obj) {
    let bindfunc = fnc.bind(obj);
    bindfunc();
}