Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/424.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 这是一个单一模式吗_Javascript_Singleton - Fatal编程技术网

Javascript 这是一个单一模式吗

Javascript 这是一个单一模式吗,javascript,singleton,Javascript,Singleton,我试图编写singleton类,最初我编写了下面的代码,我觉得这就像singleton。我把这个给其中一个人看,他马上拒绝了,所以我一直在想为什么这不是一个单身班,还是他错了 let MyFunc = (function(){ let instance; return function(){ if(instance){ return instance; } insta

我试图编写singleton类,最初我编写了下面的代码,我觉得这就像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

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


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

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


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

即使引用是相同的,实现的API也是如此误导,很难与那个家伙争论。如果您使用new来获取您的单例实例,那么您就做错了

请看一下这个实现:

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));  
}

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

即使引用是相同的,您的实现的API也是如此误导,很难与那个家伙争论。如果您使用new来获取您的单例实例,那么您就做错了

请看一下这个实现:

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));  
}

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

为什么不问问他为什么不同意?我们不知道他在找什么。如果
o1===o2
是被称为“singleton”的东西的主要要求,那么显然您编写了一个。让
new MyFunc()
始终返回相同的实例是我从评论中所能理解的障碍,这比不是单身更令人困惑,因为每次你用“new”来调用类,希望它会创建一个新的,但它返回单身。为什么不问问他为什么不同意?我们不知道他在寻找什么。如果
o1===o2
是被称为“singleton”的东西的主要要求,那么显然您编写了一个。让
new MyFunc()
始终返回相同的实例是我从评论中所能理解的障碍,这比不使用singleton更让人困惑,因为每次你用“new”调用这个类,希望它能创建一个新的类,但是它返回singleton。