Вложенные свойства объекта.defineProperties

#javascript #object #ecmascript-6

#javascript #объект #ecmascript-6

Вопрос:

Взяв пример из Mozilla, вот простой случай Object.defineProperties

 const object1 = {};

Object.defineProperties(object1, {
  property1: {
    value: 42,
    writable: true
  },
  property2: {}
});
  

Что, если бы я хотел сделать вложенный, то есть что-то вроде

 const object1 = {};

Object.defineProperties(object1, {
  nested: {
    property1: {
      value: 42,
      writable: true
    },
    property2: {}
  }
});
  

Это, очевидно, не работает, но, надеюсь, оно отображает то, что я хочу.

Комментарии:

1. Вы можете использовать Object.defineProperty для этого случая ссылку MDN

Ответ №1:

defineProperties может быть передан только существующий объект, к которому вы хотите добавить свойства, и он будет определять свойства только непосредственно для этого объекта. Невозможно заранее определить родительский объект, чтобы вызвать defineProperties вложенное свойство:

 const object1 = {nested: {}};

Object.defineProperties(object1.nested, {
  property1: {
    value: 42,
    writable: true,
    enumerable: true
  },
  property2: {
    enumerable: true
  }
});
console.log(object1);  

Комментарии:

1. Что, если я хочу определить свойства для function.prototype? Как и в, я хочу MyClass.prototype.nested получить эти новые методы / поля

2. Просто определите nested свойство заранее: MyClass.prototype.nested = {} , затем используйте defineProperties

3. Поэтому я использую github.com/michaelolof/typescript-mix модуль, и я пытаюсь изменить это так, чтобы при использовании @use я мог фактически определять микширование в другом ключе, а этого я не могу выполнить

4. Проблема в том, что область видимости теряется, когда я делаю это