getter中的Object.defineProperty()

时间:2016-11-19 17:39:17

标签: javascript

我需要使用property修改class的{​​{1}}。我知道可以通过Object.defineProperty()的{​​{1}}来完成。

如果你看到下面的例子,我正在尝试返回一个get(),当被调用时会返回descriptor的值。

我的问题是,我是否需要function再次this define对象?有必要吗?如果是,为什么?

当我为某个类定义属性时,property也会反映同样的权利吗?

我来了this,我很想知道他为什么要这样做。

this

1 个答案:

答案 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可能比读取数据属性更昂贵。