Я пытаюсь создать простую систему обратного вызова, которая срабатывает при нажатии кнопки. Вместо обратного вызова, являющегося заводской функцией, это прототип другого объекта. Я заработал, но я этого не понимаю. Зачем мне нужно использовать .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/
Когда метод уволен, он запускается в контексте его invoker, если неявно объявлено иначе ('.call',' .apply', '.bind'). –