1 回答

TA貢獻2011條經驗 獲得超2個贊
問題delete obj[prop]是只有prop直接在. _ obj如果屬性在內部原型上,它不會刪除該屬性。再舉個例子:
const obj = Object.create({ prop: 'val' });
delete obj.prop;
console.log(obj);
在您的情況下,name
是原型上的一個屬性:
class obj { get name(){
結果name
僅存在于 上obj.prototype
,但不直接存在于o1
實例上。
Object.defineProperty
修復它的一種方法是在 getter 內部使用,將屬性直接放在實例上,以便this.name
對該實例的進一步引用直接在實例上引用該屬性,而單獨使用 getter:
'use strict';
class obj {
get name(){
console.log('getter invoked');
Object.defineProperty(this, 'name', { value: "Ahmad" });
return this.name;
}
}
const o1 = new obj();
console.log(o1.name);
console.log(o1.name);
或者,也可以使用二傳手:
'use strict';
class obj {
defineName(value) {
Object.defineProperty(this, 'name', { value, writable: true });
return this.name;
}
get name(){
console.log('getter invoked');
return this.defineName("Ahmad");
}
set name(value) {
console.log('setter invoked');
return this.defineName(value);
}
}
const o1 = new obj();
o1.name = 'foo';
console.log(o1.name);
console.log(o1.name);
添加回答
舉報