node.js - NodeJS - 单例 + 事件

标签 node.js events singleton

如何在实现单例设计模式的模块上继承 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/

相关文章:

node.js - 如何检查用户是否已存在于express-validator中的customValidators?

Node.js 和全局 MySQL 连接 OBJ

javascript - 如何在多次点击事件上创建队列

ios - 有效使用单例,Objective C

c++ - 静态变量初始化为类成员或局部函数变量(单例示例)

c# - 使用 SocketIO4Net 将函数回调从 .NET 应用程序传递到 node.js

Javascript 暂停事件传播

events - 退订页面更改事件

c# - 带有双重检查锁的单例设计模式

Microsoft Bot Framework 中的 C#.net 或 Node.Js?