我目前正在学习 NodeJS 和 Javascript OOP。我需要使用一个使用事件处理程序的包。但我对 Javascript 哲学有点困惑。
我有一个运行如下的 Node 模块:
var Module = require("...");
//...
MyObject.prototype.start = function() {
var myModule = Module();
myModule.on('connected', function(device) {
console.log('New device connected !');
device.on('status', function(status){
console.log('Device status : '+status);
device.transfer("someStuff");
});
});
}
//...
我想在“device.on()”事件处理程序之外调用“device”对象的“transfer()”方法。 有没有可能?
提前致谢
编辑:我正在尝试这个
var Module = require("...");
MyObject.prototype.start = function() {
var myModule = Module();
myModule.on('connected', function(device) {
console.log('New device connected !');
device.on('status', function(status){
console.log('Device status : '+status);
//device.transfer("someStuff");
});
});
}
MyObject.prototype.transferData = function(){
device.transfer("someStuff");
}
最佳答案
由于 MyObject
有多种方法想要访问 device
,因此您可以通过多种方式进行设计:
- 实例化
MyObject
时,它会 promiseon('connected')
回调并将其存储为devicePromise
。原型(prototype)上的所有方法都遵循以下模式:return this.devicePromise.then(function (device) {/* doWhatever */})
。任何返回值的方法现在都返回 promise MyObject
无法直接实例化,只能通过返回MyObject
实例 Promise 的工厂函数来创建。此工厂函数调用on('connected')
,并使用设置了device
属性的MyObject
实例解析返回的 Promise。所有方法都可以访问this.device
关于Javascript 哲学和事件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33963960/