2014-12-05 62 views
0

我在写一个nodejs模块并尝试将事件发送器绑定到“scrappy.get”。似乎我只能将它绑定到“scrappy”....所以“scrappy.get(key).on('complete'....”不起作用。将事件发送给子对象

如何将事件发送给子对象 '得到'

我模块的NodeJS?

 var util = require('util'), 
    EventEmitter = require('events').EventEmitter; 

function Scrappy(id) { 
} 

util.inherits(Scrappy, EventEmitter); 

Scrappy.prototype.get = function (key) { 
    var self = this; 
    self.emit('complete', "here"); 
    **return this;** 
} 

module.exports = Scrappy; 

我的应用程序的NodeJS代码:

var Scrappy = require('./scrappy.js') 
var scrappy = new Scrappy("1234"); 

scrappy.get("name").on('complete', function(data){ 
    console.log("secondary"); 
}); 

结果:

scrappy.get("name").on('complete', function(data){ 
        ^
TypeError: Cannot call method 'on' of undefined 

编辑:解决。添加“返回这个;”为我解决它。谢谢!

回答

1

问题是你的this是不同的,因为你在不同的功能。你需要,而不是捕捉斗志旺盛的实例的this一个变量和访问,与其:

Scrappy.prototype.get = function (key) { 
    var self = this; 
    redisclient.get(key, function(err, reply) { 
    self.emit('complete', reply); 
    }); 
}; 

另外,代替人工变异的原型__proto__和这样的,通常是哪个节点核心应用(以及许多模块开发者使用什么)是内置的util.inherits()。其他的事情是,你没有从get()返回实例。以下是这些更改的示例:

var util = require('util'), 
    EventEmitter = require('events').EventEmitter; 

function Scrappy(id) { 
} 
util.inherits(Scrappy, EventEmitter); 

Scrappy.prototype.sendToEngine = function(message) { 

}; 
Scrappy.prototype.set = function(key, value) { 

}; 
Scrappy.prototype.get = function(key) { 
    var self = this; 

    redisclient.get(key, function(err, reply) { 
    self.emit('complete', reply); 
    }); 

    return this; 
}; 

module.exports = Scrappy; 
+0

嗯,似乎没有工作。在nodejs应用程序中,我仍然得到: scrappy.get(“name”)。on('complete',function(data){ ^ TypeError:无法读取未定义的属性'on' – klinquist 2014-12-05 21:37:37

+0

主要问题是你没有从'get()'返回Scrappy实例能够调用'.on()'。 – mscdex 2014-12-05 21:50:08

+0

mscdex,感谢您的协助,但它不适合我。 – klinquist 2014-12-05 21:52:43