JS设计模式-单例模式
面向对象:划分命名空间并将属性和方法组织在一起的一种方式
单例模式:只是实例化一次。每次返回的实例都是同一对象
1.
function person(name){
this.name = name
}
var getInstance = (function(){
var instance
return function(name){
if(!instance) instance = new person(name)
return instance
}
})()
var person1 = getInstance('zhangsan')
var person2 = getInstance('lisi')
console.log(person1.name); //zhangsan
console.log(person2.name); //zhangsan
console.log(person1 === person2); //true
通过instance变量保存唯一的实例
2.
绑定在构造函数上
function person(name){
this.name = name
}
person.getInstance = function(name){
if(!this.instance) this.instance = new person(name)
return this.instance
}
var person1 = person.getInstance('zhangsan')
var person2 = person.getInstance('lisi')
console.log(person1.name); //zhangsan
console.log(person2.name); //zhangsan
console.log(person1 === person2); //true
3.
不推荐:实例化与单例相耦合
var person = (function(){
var instance
return function(name){
if(new.target === undefined) throw new Error('请实例化')
if(!instance){
this.name = name
instance = this
}
return instance
}
})()
var person1 = new person('zhangsan')
var person2 = new person('lisi')
console.log(person1.name); //zhangsan
console.log(person2.name); //zhangsan
console.log(person1 === person2); //true
var person3 = person('hlela') //Uncaught Error: 请实例化