单例模式:多个实例对象指向同一个函数,和多例不同,A实例指向的函数可以因B实例改变而改变,可用于相同系统的登录界面,其本质原因是因为多个实例存储在内存中的栈区域的url相同,不是单独开辟一个新的堆区域。但是单例模式容易造成全局污染。
以下为单例模式的代码核心!
ES5的写法:
function Person(){
this.name='jack'
}
let person = null //人实例
function singleTop(){
if(person == null){
person = new Person()
}
return person
}
// let p1 = new Person()
// let p2 = new Person()
let p1 = singleTop()
let p2 = singleTop()
console.log(p1 == p2)
ES6写法:
let Person = (function () {
// ES5
function Person() {
this.name = 'jack'
}
let person = null //人实例
return function getSingleTop() {
if (person == null) {
person = new Person()
}
return person
}
})()
// let p1 = new Person()
// let p2 = new Person()
let p1 = new Person()
let p2 = new Person()
console.log(p1 == p2)
封装class类写法:
class CreateDiv {
static getInstane() {
if (this.divEle == null) {
this.divEle = new CreateDiv()
}
return this.divEle
}
constructor() {
this.divEle = document.createElement('div')
document.body.appendChild(this.divEle)
}
init(content) {
this.divEle.innerHTML = content
}
}
// let d1 = new CreateDiv()
let d1 = CreateDiv.getInstane()
d1.init('hello')
let d2 = CreateDiv.getInstane()
d2.init('world')