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);
添加回答
举报