Я недавно начал играть (и работать) с объектами Object.create и аналогичными ES5. Я не совсем понимаю, как работает атрибут writeable
свойства объекта. Спектр говорит, что по умолчанию установлено значение false, но как я могу изменить это, не используя геттеры и сеттеры?JS: понимание записывается как атрибут свойства объекта
Или: почему работает этот код, как это работает:
редактировать: этот код мусор! Я не понял, как здесь работают геттер и сеттер!
var ob = Object.create(Object.prototype, {
a: {
value: 'not save'
},
b: {
value: 'value configured, but writeable',
writeable: true
},
c: {
configurable: false,
get: function() {
return c;
},
set: function(string) {
c = string;
}
}
});
ob.c = 'set d the first time'; //not doing this would give us an error in the console.log line (access to ob.c)
console.log(ob.a, ob.b, ob.c); //->not save value configured, but writeable set d the first time
ob.a = 'new a';
ob.b = 'new b';
ob.c = 'new c';
console.log(ob.a, ob.b, ob.c, ob.d); //->not save value configured, but writeable new c
Почему только ob.c это на самом деле Writeable, но не ob.b - или то, что я делаю неправильно?
редактировать: лучший код здесь
var ob = Object.create(Object.prototype, {
a: {
value: 'not save',
},
b: {
value: 'value configured, but writeable',
writeable: true
},
c: {
configurable: false,
get: function() {
return this.a; // works, but is not useful because of the naming and a is not writeable
},
set: function(string) {
this.a = string; // works, but is not useful because of the naming and a is not writeable
}
}
});
Ваш геттер и сеттер относятся к глобальной переменной с именем 'c', а не в собственности' c'. – georg
ничего себе, действительно 2. - спасибо! – BairDev