简单测试的JavaScript.bind()方法
我想测试JavaScript.bind()方法,但我做错了-值(通过引用传递)没有增加,仍然是5 这是我的密码:简单测试的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
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();
}