我目前正在学习NodeJS和Javascript OOP。我需要使用使用事件处理程序的程序包。但是我对Javascript哲学有些困惑。
我有一个像这样运行的节点模块:
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
时,它会规范on('connected')
回调并将其存储为(例如)devicePromise
。原型上的所有方法均遵循以下模式:return this.devicePromise.then(function (device) { /* do whatever */ })
。现在,任何返回值的方法都将返回promiseMyObject
不能直接实例化,只能通过工厂函数创建,该函数返回MyObject
实例的承诺。此工厂函数调用on('connected')
,并使用设置了MyObject
属性的device
实例解析返回的promise。所有方法都可以访问this.device
关于javascript - Javascript哲学和事件,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/33963960/