【Javascript】单例模式

定义:只有一个实例;提供全局的一个访问点。

解决的问题:一个全局使用的类,频繁的创建和销毁。

何时使用:当你想控制实例的数目,节省系统化资源的时候。

如何实现:判断系统是否已经有这个单例,如果有则返回,没有则创建。

单例模式的优点:内存中只有一个实例,减少了内存的开销,尤其是频繁的创建和销毁实例。

使用场景: 全局的缓存;弹窗。

注:ES5实现单例模式依靠闭包,ES6实现单例模式可使用类。


ES5 实现单例模式

<!DOCTYPE html>
<html>
<head>
    <meta charset="utf-8">
    <title>ES5单例模式</title>
</head>
<body>
  <button id="button">登陆</button>
  <script>
    var getSingle = function (fn) {
      var result
      return function (){
        return result || (result = fn.apply(this, arguments))
      }
    }

    var createLoginLayer = function () {
      var div = document.createElement('div')
      div.innerHTML = '我是登陆的弹窗'
      div.style.display = 'none'
      document.body.appendChild(div)
      return div
    }

    var createSingleLogin = getSingle(createLoginLayer)
    document.getElementById('button').onclick = function () {
      var loginLayer = createSingleLogin()
      loginLayer.style.display = 'block'
    }
  </script>
</body>
</html>

ES6 实现单例模式

<!DOCTYPE html>
<html>
<head>
    <meta charset="utf-8">
    <title>ES6单例模式</title>
</head>
<body>
  <script>
    class Person {
      constructor(name, sex) {
        this.name = name
        this. sex = sex
      }
      static getInstance(name, sex) {
        if(!this.instance) {
          this.instance = new Person(name, sex)
        }
        return this.instance
      }
    }

    let p1 = Person.getInstance('小张', '女')
    let p2 = Person.getInstance('小李', '男')
    //预期结果 true
    console.log(p1===p2)
  </script>
</body>
</html>

 

以上仅为个人学习使用。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值