要实现一个标准的单例模式并不复杂,无非是用一个变量来标志当前是否已经为某个类创建过对象,如果是,则在下一次获取该类的实例时,直接返回之前创建的对象。
<script type="text/javascript">
var Singleton = function(name){
this.name = name;
this.instance = null;
}
Singleton.prototype.getName = function() {
alert(this.name);
};
Singleton.getInstance = function(name) {
if (!this.instance) {
this.instance = new Singleton(name);
}
return this.instance;
}
var a = Singleton.getInstance('sven1');
var b = Singleton.getInstance('sven2');
alert(a == b);
</script>
或者
<script type="text/javascript">
var Singleton = function(name){
this.name = name;
}
Singleton.prototype.getName = function(){
alert(this.name);
}
Singleton.getInstance = (function(){
var instance = null;
return function(name){
if(!instance){
instance = new Singleton(name);
}
return instance;
}
})();
</script>
这种实现方法,较为简单,但有一个问题就是,增加了这个类的不透明性, Singleton类的使用者必须知道这是一个单例类,跟以往通过new xxx 的方式来获取对象不同,这里偏要使用Singleton.getInstance来获取对象。