在一个当前使用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
设置和获取在A.prototype中定义的b.value是有效的。
现在考虑以下演示,我将setter从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 B();
b.value = 2; // b.__value is 2
console.log(b.value); // output: undefined
设置值是有效的(因为b.__value确实是2),但getter似乎不存在,尽管它仍然在A.prototype中定义。
这里的问题是什么?