/**
 * Object.defineProperty 그러나 "게으른" 값은 이후에만 값이 설정됨을 의미합니다.
 * 바로 설정되지 않고 처음으로 검색됩니다.
 *
 * @param {Object} obj 속성을 설정할 객체
 * @param {string} key 설정할 속성의 키
 * @param {Function} getValue 필요할 때 값을 가져오는 데 사용되는 함수입니다.
 * @param {boolean} setter는 setter가 허용되어야 하는지 여부를 결정합니다.
 */
const defineLazyProperty = function(obj, key, getValue, setter = true) {
  상수 집합 = (값) =>
    Object.defineProperty(obj, 키, {값, 열거 가능: 참, 쓰기 가능: 참});

  const 옵션 = {
    구성 가능: 참,
    열거 가능: 참,
    얻다() {
      const 값 = getValue();

      설정(값);

      반환 값;
    }
  };

  if (세터) {
    options.set = 설정;
  }

  Object.defineProperty(obj, 키, 옵션)를 반환합니다.
};

기본 defineLazyProperty 내보내기;