我意识到这样的问题经常被问到(在过去的几天里我可能已经阅读了其中的每一个问题,试图了解如何解决这个问题) - 但在这种情况下,虽然我相当有信心,但我知道这是为什么发生这种情况,我正在努力实施实际的解决方案。
我正在使用 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 的绑定,因此它无法在 Foo 上找到“发送”函数。
我将如何修改 Foo 以便 sendData 保持其与 Foo 的绑定?是否有更好的方法来构造此代码,以便不需要这样做?