这是单身模式

时间:2018-02-23 07:26:13

标签: javascript singleton

我正在尝试编写单例类,最初我编写了下面的代码,这对我来说就像是单身人士。我向其中一个人展示了这个,他立即拒绝了,所以这让我想到为什么它不是一个单身人士课或者他错了?

    let MyFunc = (function(){
       let instance;
       return function(){
           if(instance){
              return instance;
           }
           instance = this;
       } 
    }());
  let o1 = new MyFunc();
  let o2 = new MyFunc(); 
  console.log(o1===o2) //returns true

2 个答案:

答案 0 :(得分:2)

我们无法猜出那个人不同意的原因。当然,无论您通过new调用它的次数,该代码都会返回单个对象,并且该对象将获得MyFunc.prototype作为其原型。所以从这个意义上说,它是一个返回单个对象的函数。

JavaScript中的单例构造模式并没有太多用处(因为我们可以直接创建一次性对象),但这似乎是它的有效实现。

答案 1 :(得分:1)

即使参考文献是相同的,你实施的API也是如此误导,以至于很难与那个人争论。如果您使用new来获取Singleton实例,那么您做错了。

看看这个实现:

var Singleton = (function () {
    var instance;

    function createInstance() {
        var object = new Object("I am the instance");
        return object;
    }

    return {
        getInstance: function () {
            if (!instance) {
                instance = createInstance();
            }
            return instance;
        }
    };
})();

function run() {

    var instance1 = Singleton.getInstance();
    var instance2 = Singleton.getInstance();

    alert("Same instance? " + (instance1 === instance2));  
}

它清楚地表达了其作者的意图。