Skip to content

透明的单例模式

javascript
const CreateDiv = (function () {
  let instance = null

  return function (html) {
    if (instance) {
      return instance
    }

    this.html = html
    this.init()
    return instance = this
  }
})()

createDiv.prototype.init = function () {
  const div = document.createElement('div')
  div.innerHTML = this.html
  document.body.appendChild(div)
}

const div1 = new CreateDiv('foo')
const div2 = new CreateDiv('bar')
div1 === div2 // output: true

构造函数 CreateDiv 做了两件事。第一是创建对象和执行初始化 init 方法,第二是保证只有 一个对象,违反了”单一职责原则“,加入某天需要利用这个类创建多个 div,即要让这个类从 单例类变成多例类,就需要改写构造函数 CreateDiv,会给我们带来不必要的麻烦。