Я хочу преобразовать свойство data в свойство accessor с помощью Object.defineProperty(). Рассмотрим для этого код, который приводит к Uncaught RangeError: Maximum call stack size exceeded
ошибкиИспользование getter и setter с Object.defineProperty
var c = { name: 'abcde'};
Object.defineProperty(c, 'name', {
get: function() {
return this.name; //causes stack overflow
},
set: function(x) {
this.name = x; //causes stack overflow
}
});
c.name="xyz";
console.log(c.name);
я понял, почему урожай ошибок в. Один из предлагаемого решения заключается в удалении «это» из геттер и сеттер, и это похоже на работу.
var c = { name: 'abcde'};
Object.defineProperty(c, 'name', {
get: function() {
return name; //removed this
},
set: function(x) {
name = x; //removed this
}
});
c.name="xyz";
console.log(c.name);
Что происходит? В общем, я хочу спросить, как преобразовать свойство data в свойство accessor с помощью Object.defineProperty()?
Удивительное решения. Но как же тогда я могу преобразовать свойство данных, например «имя» здесь, в свойство accessor? здесь вы сохранили имя в закрытии. Сначала я хочу, чтобы это свойство данных. –
@BreakingBenjamin AFAIK, единственный способ - затенять реальное свойство, а затем просто использовать соглашения об именах (например, ведущее подчеркивание), чтобы пометить реальное свойство как «личное», так, например, вы можете использовать '._name' для хранения фактического значения, но получить доступ к нему через' .name'. – Alnitak