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