无法分配超类中仅具有吸气剂的属性

时间:2019-05-16 21:06:46

标签: javascript inheritance override getter defineproperty

今天我完全惊讶地发现以下代码错误:

class Base {
  get foo() { return 42 }
}

class Derived extends Base {
  constructor() {
    super()
    console.log(this, Object.getOwnPropertyDescriptor(this, 'foo'))
    this.foo = 52
  }
}

new Derived()

以下是输出:

Derived {} undefined
/Users/andy/clarity/src/server/temp.js:14
    this.foo = 52;
             ^

TypeError: Cannot set property foo of #<Base> which has only a getter
    at new Derived (/Users/andy/clarity/src/server/temp.js:11:5)

在何处指定此行为,VM如何执行?

我本以为只能将对象分配为对象的拥有只读,但是在这种情况下,VM似乎正在检查原型链。

让我感到困惑的是,以下分配不会出错但没有效果:

const base = {
  get foo() {return 42}
}

const derived = Object.create(base)
derived.foo = 58

console.log(derived.foo) // outputs 42???

在一项财产转让中,幕后的事情显然比我想象的要多得多。 我想人们对,我应该阅读规范

0 个答案:

没有答案