我正在尝试创建一个简单的回调系统,该系统会在按下按钮时触发。它不是回调是工厂函数,而是不同对象的原型方法。我已经开始工作,但我不明白。为什么我需要使用.bind(object)来获取对象来触发它的方法?最初我没有试过绑定,然后绑定(这个),这两个都失败了。
function Bar() {}
Bar.prototype = {
getStuff: function () {
return "Hello";
},
setStuff: function () {
console.log( this.getStuff() );
}
}
function Foo() {
this.afterSubmit = null;
var self = this;
$('button').click(function () {
self.submit()
});
return this;
}
Foo.prototype = {
submit: function () {
if (this.afterSubmit !== null) {
this.afterSubmit();
}
$('#msg').append('clicked ');
return this;
},
setAfterSubmit: function (callback) {
this.afterSubmit = callback;
return this;
}
}
var bar = new Bar();
var foo = new Foo().setAfterSubmit(bar.setStuff.bind(bar));
// Why do I need to bind bar ?
请看看我的小提琴 https://jsfiddle.net/j5qfuzna/
答案 0 :(得分:1)
this.afterSubmit();
这是将上下文设置为Foo
实例。将其绑定到Bar
实例可以防止这种情况发生。