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