Javascript中的单例和原型

时间:2014-06-11 23:18:27

标签: javascript oop singleton prototype

我只是在研究用JavaScript定义单例的方法,在查看了几个示例后,我想到了以下我无法找到的方法:

function MyClass() {
   if (MyClass._sharedInstance === undefined) {
      // actual constructor code

      MyClass._sharedInstance = this;
   }
   return MyClass._sharedInstance;
}

MyClass._sharedInstance = undefined;

似乎工作正常......但我无法在任何地方找到这一点的事实让我产生怀疑。有没有理由不以这种方式做单身,特别是考虑到JavaScript的许多小陷阱。我知道通过简单地执行var MyClass = { /* MyClass Stuff */ }我可以用更少的代码来实现单例,但为了保持一致性,我想使用原型来定义所有类。

1 个答案:

答案 0 :(得分:1)

建议的解决方案似乎并没有解决问题。任何 1 ;因此, 我推荐一种简单模块模式的标准变体"使用惯用语IIFE

MySingleton = (function () {
    // This function is only executed once
    // and whatever is returned is the singleton.
    return {
       // Expose members here
    };
})();

根据具体需要,还可以返回一个新的对象,使这种模式更加灵活,而无需引入单独的"单例"田野和守卫,例如。

MySingleton = (function () {
    // Contrived, but valid - any object returned
    // functions as the singleton.
    function MyClass {}
    return new MyClass();
})();

1 如果有的话,可能会导致一些" WTF?" new MyClass()返回不是"正常"的共享/单个对象的时刻行为。