class类的方法

1、饿汉式

  • 在单例类被加载时候(立即加载),就实例化一个对象并交给自己的引用.
  • 线程安全(前端不讨论)
    1. class SingleObject {
    2. private static instance: SingleObject = new SingleObject();
    3. private SingleObject() {
    4. }
    5. public static GetInstance(): SingleObject {
    6. return this.instance
    7. }
    8. }

这里我添加一个自己常用的公开的类(别怕!new它)

  1. class SingleObject {
  2. private static instance: SingleObject;
  3. constructor() {
  4. if (!SingleObject.instance) {
  5. SingleObject.instance = this
  6. }
  7. return SingleObject.instance
  8. }
  9. }

2、懒汉式

  • 在真正使用的时候才会实例化一个对象并交给自己的引用(延迟加载)
  • 非线程安全(前端不讨论)
    1. class SingleObject {
    2. private static instance: SingleObject;
    3. private SingleObject() { }
    4. public static GetInstance(): SingleObject {
    5. if (!this.instance) {
    6. this.instance = new SingleObject()
    7. }
    8. return this.instance
    9. }
    10. }

闭包

  • 为了模仿这个单例,使用闭包记住词法作用域的作用
    1. function SingleObject(){}
    2. SingleObject.getInstance = (function(){
    3. let instance;
    4. return function(){
    5. if(!instance){
    6. instance = new SingleObject()
    7. }
    8. return instance
    9. }
    10. })()