Я понимаю, что вопрос, подобный этому, задают довольно часто (я, вероятно, читал каждый из них в течение последних нескольких дней, пытаясь понять, как это исправить) - но в этом случае, хотя я довольно уверен, я знаю, почему это происходит, я изо всех сил пытаюсь реализовать реальное решение.
Я создаю небольшое приложение с использованием Node.js, но у меня возникают проблемы с созданием объекта с функциями-прототипами, которые не потеряют свою привязку при передаче.
Вот что у меня есть:
foo.js
var Foo = module.exports = function(server) {
this.server = server;
// some other stuff
};
Foo.prototype.send = function(data) {
server.doStuff(data);
};
Foo.prototype.sendData = function(data) {
// do stuff with data;
this.send(data);
};
bar.js
var Bar = module.exports = function() {
this.dataStore = // data store connection;
};
Bar.prototype.getSomething(data, callback) {
this.dataStore.get(data, function(err, response) {
callback(response);
});
};
main.js
var Foo = require('./foo');
var Bar = require('./bar');
var aFoo = new Foo(server);
var aBar = new Bar();
// at some point do:
aBar.getSomething(data, aFoo.sendData);
Как вы, вероятно, можете себе представить, передача этой функции aFoo.sendData для использования в качестве обратного вызова приводит к потере привязки к aFoo, поэтому она не может найти функцию 'send' в Foo.
Как бы я изменил Foo, чтобы sendData поддерживал его привязку к Foo? Есть ли лучший способ структурировать этот код так, чтобы в этом не было необходимости?