我需要使用property
修改class
的{{1}}。我知道可以通过Object.defineProperty()
的{{1}}来完成。
如果你看到下面的例子,我正在尝试返回一个get()
,当被调用时会返回descriptor
的值。
我的问题是,我是否需要function
再次this
define
对象?有必要吗?如果是,为什么?
当我为某个类定义属性时,property
也会反映同样的权利吗?
我来了this,我很想知道他为什么要这样做。
this
答案 0 :(得分:1)
我不知道为什么这个人会这样做。我可能不会这样做。但如果你的问题是这样做是否存在差异,答案是肯定的。
class A {
constructor() {
this.h = 'hello world'
}
hello() {}
}
const des = Object.getOwnPropertyDescriptor(A.prototype, 'hello')
Object.defineProperty(A.prototype, 'hello1', {
configurable: true,
get: function() {
Object.defineProperty(this, 'hello1', {
configurable: true,
value: () => this.h,
});
return () => this.h;
}
});
Object.defineProperty(A.prototype, 'hello2', {
configurable: true,
get: function() {
return () => this.h;
}
});
const n = new A()
console.log(n.hello1); // () => this.h OK
console.log(n.hello2); // () => this.h OK
Object.setPrototypeOf(n, null);
console.log(n.hello1); // () => this.h Still OK
console.log(n.hello2); // undefined Oops!

调用getter可能比读取数据属性更昂贵。