Я пытаюсь создать объект. Но я не понимаю, почему мои установщики getter свойств не могут просто позвонить this.bar
. Таким образом, мой объект foo, кажется, имеет два свойства.Использование Object.defineProperties дает два свойства
Правильно ли это или я:
- используя defineProperties неправильные
- отсутствует точка
создание foo
с bar
собственности
var foo = function()
{
Object.defineProperties(this, {
bar : {
get : function() {return this.barVal},
set : function(value) { this.barVal = value},
enumerable: true,
configurable: true
}
})
};
var o = new foo();
o.bar = "Hello";
console.log(JSON.stringify(o));
//output {"bar":"Hello","barVal":"Hello"}
Как интересно. Так defineProperties действительно только для очень сложных объектов? в противном случае это кажется мне излишним. Я просто хотел предварительно определить свойства (я привык к C#, так что это немного кривая обучения) – JonWells
Если вы просто хотите установить значение, вы можете просто сделать this.bar = value'. Object.defineProperty предназначен для аксессуаров (set/get) или data (value), если вы хотите, чтобы перечислимый/настраиваемый/записываемый был ложным. –
Также Object.defineProperty может использоваться только для ОБНОВЛЕНИЯ существующего свойства. Например, вы хотите сделать свойство неперечислимым: 'this.bar = 'Hello'; Object.defineProperty (это, 'bar', {enumerable: false}); 'будет работать по желанию, сохраняя существующее значение, но изменяя перечислимость. –