覆盖一个setter,getter也必须被覆盖
Override a setter, and the getter must also be overridden
class AbstractClass {
constructor() {
}
set property(value) {
this.property_ = value;
}
get property() {
return this.property_;
}
}
class Subclass extends AbstractClass {
constructor() {
super();
}
set property(value) {
super.property = value;
if (!(this.property_ instanceof SubclassAssociatedClass)) throw new TypeError();
}
//get property() {
// return super.property;
//}
}
覆盖属性的 set
方法,看起来 get
方法也必须被覆盖,否则返回 undefined
(即 get
方法是不继承,取消注释上面的子类 get property()
方法,一切正常。
我假设这是规范的一部分。如果行为是交叉编译的结果,它可能会遵循。可以肯定的是,这是对覆盖的 setter 和 getter 进行编码的正确方法吗(同时或根本不同)?
是的,这是故意的(规范的一部分)。如果一个对象有自己的 属性(在你的例子中是 .property
),这个 属性 将被使用而不是继承的。如果 属性 存在,但它是一个没有 getter 的访问器 属性,那么将返回 undefined
。
请注意,此行为在 ES5 中没有改变。
class AbstractClass {
constructor() {
}
set property(value) {
this.property_ = value;
}
get property() {
return this.property_;
}
}
class Subclass extends AbstractClass {
constructor() {
super();
}
set property(value) {
super.property = value;
if (!(this.property_ instanceof SubclassAssociatedClass)) throw new TypeError();
}
//get property() {
// return super.property;
//}
}
覆盖属性的 set
方法,看起来 get
方法也必须被覆盖,否则返回 undefined
(即 get
方法是不继承,取消注释上面的子类 get property()
方法,一切正常。
我假设这是规范的一部分。如果行为是交叉编译的结果,它可能会遵循。可以肯定的是,这是对覆盖的 setter 和 getter 进行编码的正确方法吗(同时或根本不同)?
是的,这是故意的(规范的一部分)。如果一个对象有自己的 属性(在你的例子中是 .property
),这个 属性 将被使用而不是继承的。如果 属性 存在,但它是一个没有 getter 的访问器 属性,那么将返回 undefined
。
请注意,此行为在 ES5 中没有改变。