在 javascript 中正确实现单例
Proper implementation of singleton in javascript
我在 javascript 中遇到了单例设计模式的实现。
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;
}
};
})();
方法二
var singleton = (function(){
var a = { value: "string"};
return {
getInstance: function(){
return a;
}
};
})();
var ob = singleton.getInstance();
var be = singleton.getInstance();
console.log(ob===be); //logs true
所以我的问题是第二种方法是否有任何问题。
我认为没有必要创建一个函数并让它return一个对象,而是我们可以简单地创建一个对象并通过getInstance()方法return它,因为它是IIFE(immediately invoked function),被创建的对象只有一个实例,所以我们无论如何都不需要进行以下检查
如果(!实例){实例= createInstance()}
相当
我们应该立即调用函数,在该函数中创建一个对象,它将是私有对象,然后 return 通过 getInstance 方法创建它。
我的问题是:我的理解是否正确,或者我遗漏了一些要点,因此在 javascript.
中实现单数是错误的
非常感谢
这样做的原因
return {
getInstance: function () {
if (!instance){
instance = createInstance();
}
return instance;
}
};
在第一次调用 getInstance 之前不会创建实例...因此可能永远不会实例化单例(如果 "epensive" 这样做很好)
是第二种方法是正确的。第二种方法没有问题。
人们通过从 java 扩展它来解释第一种方法的使用,java 是基于 class 的语言,我们需要在使用前实例化一个对象,
但是在java脚本中,我们可以简单地使用对象字面量创建一个对象,它将是单例对象,例如:
变量 a = { };
这里 a 是单例对象,不能有另一个像 a.
这样的 created 实例
如果我们希望我们的单例对象有私有变量和私有方法,我们可以通过问题中提到的第二种方法。
请查看以下链接进行说明
Simplest/Cleanest way to implement singleton in JavaScript?
javascript singleton question
我在 javascript 中遇到了单例设计模式的实现。
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;
}
};
})();
方法二
var singleton = (function(){
var a = { value: "string"};
return {
getInstance: function(){
return a;
}
};
})();
var ob = singleton.getInstance();
var be = singleton.getInstance();
console.log(ob===be); //logs true
所以我的问题是第二种方法是否有任何问题。
我认为没有必要创建一个函数并让它return一个对象,而是我们可以简单地创建一个对象并通过getInstance()方法return它,因为它是IIFE(immediately invoked function),被创建的对象只有一个实例,所以我们无论如何都不需要进行以下检查 如果(!实例){实例= createInstance()} 相当 我们应该立即调用函数,在该函数中创建一个对象,它将是私有对象,然后 return 通过 getInstance 方法创建它。
我的问题是:我的理解是否正确,或者我遗漏了一些要点,因此在 javascript.
中实现单数是错误的非常感谢
这样做的原因
return {
getInstance: function () {
if (!instance){
instance = createInstance();
}
return instance;
}
};
在第一次调用 getInstance 之前不会创建实例...因此可能永远不会实例化单例(如果 "epensive" 这样做很好)
是第二种方法是正确的。第二种方法没有问题。
人们通过从 java 扩展它来解释第一种方法的使用,java 是基于 class 的语言,我们需要在使用前实例化一个对象,
但是在java脚本中,我们可以简单地使用对象字面量创建一个对象,它将是单例对象,例如: 变量 a = { }; 这里 a 是单例对象,不能有另一个像 a.
这样的 created 实例如果我们希望我们的单例对象有私有变量和私有方法,我们可以通过问题中提到的第二种方法。
请查看以下链接进行说明 Simplest/Cleanest way to implement singleton in JavaScript?
javascript singleton question