function Singleton(name) {
this.name = name;
this.instance = null;
}
// 原型扩展类的一个方法
Singleton.prototype.getName = function () {
console.log(this.name);
};
Singleton.getInstance = function (name) {
if (!this.instance) {
this.instance = new Singleton(name);
}
return this.instance;
};
// 获取对象
var a = Singleton.getInstance("a");
var b = Singleton.getInstance("b");
// 进行比较
console.log(a === b);
或者采用闭包的方式
function Singleton(name) {
this.name = name;
}
Singleton.prototype.getName = function () {
console.log(this.name);
};
Singleton.getInstance = (function () {
var instance;
return function (name) {
if (!instance) {
this.instance = new Singleton(name);
}
return this.instance;
};
})();
// 获取对象1
var a = Singleton.getInstance("a");
// 获取对象2
var b = Singleton.getInstance("b");
// 进行比较
console.log(a === b);
以上两种方法都不太透明, 我们需要通过 Singleton.getInstance() 对象, 不知道的需要研究代码的实现 与我们常见的用 new 关键字来获取对象有出入,实际意义不大。
// 单例构造函数
function CreateSingleton(name) {
this.name = name;
this.getName();
}
// 获取实例的名字
CreateSingleton.prototype.getName = function () {
console.log(this.name);
};
// 单例对象
var Singleton = (function () {
var instance;
return function (name) {
if (!instance) {
instance = new CreateSingleton(name);
}
return instance;
};
})();
// 创建实例对象1
var a = new Singleton("a");
// 创建实例对象2
var b = new Singleton("b");
console.log(a === b);