我正在尝试编写单例类,最初我编写了下面的代码,这对我来说就像是单身人士。我向其中一个人展示了这个,他立即拒绝了,所以这让我想到为什么它不是一个单身人士课或者他错了?
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
答案 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));
}
它清楚地表达了其作者的意图。