/**
 * Object.defineProperty aber "lazy", d.h. der Wert wird erst nach
 * beim ersten Mal abgerufen wird und nicht sofort eingestellt wird.
 *
 * @param {Object} obj das Objekt, auf das die Eigenschaft gesetzt werden soll
 * @param {string} key der Schlüssel für die zu setzende Eigenschaft
 * @param {Function} getValue die Funktion, die verwendet wird, um den Wert zu erhalten, wenn er benötigt wird.
 * @param {boolean} setter ob ein setter erlaubt sein soll oder nicht
 * /
const defineLazyProperty = function(obj, key, getValue, setter = true) {
  const set = (Wert) =>
    Object.defineProperty(obj, key, {value, enumerable: true, writable: true});

  const options = {
    konfigurierbar: wahr,
    aufzählbar: wahr,
    get() {
      const value = getValue();

      set(wert);

      rückgabewert;
    }
  };

  wenn (Setter) {
    options.set = set;
  }

  return Object.defineProperty(obj, key, options);
};

exportieren standardmäßig defineLazyProperty;