如何在实现单例设计模式的模块上继承 events.EventEmitter 方法?
var EventEmitter = require('events').EventEmitter;
var Singleton = {};
util.inherits(Singleton, EventEmitter);
Singleton.createClient = function(options) {
this.url = options.url || null;
if(this.url === null) {
this.emit('error', 'Invalid url');
} else {
this.emit('created', true);
}
}
module.exports = Singleton;
这会导致错误:TypeError: Object #<Object> has no method 'emit'
最佳答案
我在你的问题中没有看到单例模式。你的意思是这样的?
var util = require("util")
, EventEmitter = process.EventEmitter
, instance;
function Singleton() {
EventEmitter.call(this);
}
util.inherits(Singleton, EventEmitter);
module.exports = {
// call it getInstance, createClient, whatever you're doing
getInstance: function() {
return instance || (instance = new Singleton());
}
};
它的用法如下:
var Singleton = require('./singleton')
, a = Singleton.getInstance()
, b = Singleton.getInstance();
console.log(a === b) // yep, that's true
a.on('foo', function(x) { console.log('foo', x); });
Singleton.getInstance().emit('foo', 'bar'); // prints "foo bar"
关于node.js - NodeJS - 单例 + 事件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13466227/