我想测试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));
答案 0 :(得分:4)
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使用新上下文创建一个新函数