1 回答

TA貢獻(xiàn)2011條經(jīng)驗(yàn) 獲得超2個(gè)贊
問(wèn)題delete obj[prop]是只有prop直接在. _ obj如果屬性在內(nèi)部原型上,它不會(huì)刪除該屬性。再舉個(gè)例子:
const obj = Object.create({ prop: 'val' });
delete obj.prop;
console.log(obj);
在您的情況下,name
是原型上的一個(gè)屬性:
class obj { get name(){
結(jié)果name
僅存在于 上obj.prototype
,但不直接存在于o1
實(shí)例上。
Object.defineProperty
修復(fù)它的一種方法是在 getter 內(nèi)部使用,將屬性直接放在實(shí)例上,以便this.name
對(duì)該實(shí)例的進(jìn)一步引用直接在實(shí)例上引用該屬性,而單獨(dú)使用 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);
添加回答
舉報(bào)