#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. Проблема в том, что область видимости теряется, когда я делаю это