Singleton 的寫法

class AnimalManager {
  constructor() {
    this.init()
  }

  init() {
    this.name = 'AnimalManager'
  }
}

export default new AnimalManager()

class AnimalManager {
  constructor() {
    if (Animal.instance) {
      return Animal.instance
    }

    this.init()
    Animal.instance = this
  }

  init() {
    this.name = 'AnimalManager'
  }
}

export default AnimalManager


// typescript 可以用靜態工廠模式 (Static Factory Pattern) 
class AnimalManager {
    private static instance: AnimalManager;
    
    public static getInstance(): AnimalManager {
        if (!AnimalManager.instance) {
            AnimalManager.instance = new AnimalManager();
        }
        return AnimalManager.instance;
    }
}

if 的寫法

// Good
if (dog) {
  doSomething()
  create(dog)
}

// Good
if (dog) create(dog)

// Bad
dog && create(dog)

get/set in class

// Bad
class Dog {
  #dogname
  
  constructor() {
    this.#dogname = 'Droopy'
  }

  get dogName() {
    return this.#dogname
  }

  set dogName(name) {
    // Not doing anything else. 
    this.#dogname = name
  }
}

// Good
class Dog {  
  constructor() {
    this.dogname = 'Droopy'
  }
}