NodeJS中的Javascript Singleton类创建

时间:2014-10-14 19:45:41

标签: javascript node.js prototype-programming

我提到了在NodeJS express app中创建Singleton类的两种方法,请帮助我理解这些实现的一些内容:

  • 确认两者是否相同 - 我想是的,因为结果是相同的运行时间输出
  • 哪一种是首选的编码方式
  • 是否有任何性能差异
  • 在NodeJS Express应用程序中为控制器和数据库包装器创建类的任何其他更好的方法

方法1

(function (nameClass) {
    nameClass.name = 'John';
    nameClass.getName = function () {
        return nameClass.name;
    };
    nameClass.setName = function (newName) { 
        nameClass.name = newName;
    };
})(module.exports);

方法2

var fu = new function () {
    this.name = "John";
    this.getName = function () {
        return this.name;
    };
    this.setName = function (newName) { 
        this.name = newName;
    };
};
module.exports = fu;

2 个答案:

答案 0 :(得分:2)

Singleton是只有一个实例的类。 Javascript没有类。当然,它们可以使用构造函数和原型轻松模拟,最重要的是可以模拟单例,但是为什么?您可以直接创建实例。

如果删除代码中没有任何意义的部分,则两种方法都将相同:

exports.name = "John";
exports.getName = function () {
    return this.name;
};
exports.setName = function (newName) { 
    this.name = newName;
};

您还可以name“私有”:

var name = "John";
exports.getName = function () {
    return name;
};
exports.setName = function (newName) { 
    name = newName;
};

这是node.js中最好的“单身人士”。

答案 1 :(得分:-2)

我更喜欢第二种方法,但我认为单例类是一种糟糕的设计模式 - 很难进行单元测试。

值得注意的是,nodejs模块本身就是单例(因为它们在需要时被缓存) - https://gist.github.com/vodolaz095/6201232