Observer & Singleton Patterns

What is the correct way to implement lazy initialization in a Singleton?
class LazySingleton {
  static #instance;
  #data;

  constructor() {
    if (LazySingleton.#instance) {
      return LazySingleton.#instance;
    }
    this.#data = null;
    LazySingleton.#instance = this;
  }

  static getInstance() {
    if (!LazySingleton.#instance) {
      LazySingleton.#instance = new LazySingleton();
    }
    return LazySingleton.#instance;
  }

  initialize() {
    if (this.#data === null) {
      this.#data = this.loadExpensiveData();
    }
    return this.#data;
  }

  loadExpensiveData() {
    // Expensive initialization logic
  }
}
Next Question (10/15)