前端开发工程师必备系列-几个简单的JS单例模式
JavaScript单例模式
1. 单例模式
单例模式 (Singleton) 的实现在于保证一个特定类只有一个实例,第二次使用同一个类创建新对象的时候,应该得到与第一次创建对象完全相同的对象。
当创建一个新对象时,实际上没有其他对象与其类似,因此新对象已经是单例了
但是如何在对构造函数使用 new 操作符创建多个对象的时候仅获取一个单例对象呢。
2. 静态属性中的实例
在构造函数的静态属性中缓存该实例,缺点在于 instance 属性是公开可访问的属性,在外部代码中可能会修改该属性。
3. 闭包中的实例
可以把实例封装在闭包中,这样可以保证该实例的私有性并且保证该实例不会在构造函数之外被修改,代价是带来了额外的闭包开销。
当第一次调用构造函数时,它正常返回 this ,然后在以后调用时,它将会执行重写构造函数,这个构造函数通过闭包访问了私有instance变量,并且简单的返回了该 instance。
4. 惰性单例
有时候对于单例对象需要延迟创建,所以在单例中还存在一种延迟创建的形式,也有人称之为惰性创建。
网上的帖子大多深浅不一,甚至有些前后矛盾,这篇是做个简单的总结,如果发现错误,欢迎留言指出~