JavaScript .bind()方法简单测试

时间:2014-01-01 15:06:22

标签: 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);
}

functionChanger(ancestor.add, ancestor);

我想要实现的正确版本

function functionChanger(fnc) {
 fnc();
}

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

3 个答案:

答案 0 :(得分:4)

我想你想要callapply

function functionChanger(fnc, obj) {
    fnc.call(obj);
}
/* or */
function functionChanger(fnc, obj) {
    fnc.apply(obj);
}

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

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

答案 1 :(得分:3)

bind 返回 功能。你没有把它分配给任何东西。

答案 2 :(得分:0)

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

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

bind使用新上下文创建一个新函数