在当前使用ES6类语法和get / set语法的JavaScript项目中,我偶然发现了我无法解释的行为。
首先,一个提取的演示可以按预期工作:
class A {
constructor() {
this.__value = null;
}
get value() {
return this.__value;
}
set value(value) {
this.__value = value;
}
}
class B extends A { }
let b = new B();
b.value = 2;
console.log(b.value); // output: 2
Run Code Online (Sandbox Code Playgroud)
设置和获取b.value(在A.prototype中定义)有效。
现在考虑下面的演示,其中我仅将设置器从A移到了B:
class A {
constructor() {
this.__value = null;
}
get value() {
return this.__value;
}
}
class B extends A {
set value(value) {
this.__value = value;
}
}
let b = new …Run Code Online (Sandbox Code Playgroud)