【发布时间】:2019-05-04 05:06:43
【问题描述】:
在 Javascript 中,带有以下插图代码:
class Base {
constructor() { this._val = 1 }
get val() { return this._val }
}
class Xtnd extends Base {
set val(v) { this._val = v }
}
let x = new Xtnd();
x.val = 5;
console.log(x.val); // prints 'undefined'
实例x 不会从Base 类继承get val()...。事实上,Javascript 将在 setter 存在的情况下不存在 getter 视为未定义。
我有一种情况,我有很多类都有完全相同的 getter 集,但 setter 是唯一的。目前,我只是在每个类中复制 getter,但我正在重构并希望消除冗余代码。
有没有办法告诉 JS 让 getter 远离基类,或者有没有人有一个优雅的解决方案来解决这个问题?
【问题讨论】:
-
供以后参考,这个问题与redundancy标签无关,它指的是故意复制代码以使关键部分更健壮。我很确定您打算使用boilerplate,它指的是看似不必要的代码重复。
-
"我有很多类都具有完全相同的 getter 集但唯一的 setter。" - 你真的需要继承吗?如果您只想避免重复,那么 JS 还有很多其他共享代码的方式。
-
"有没有办法告诉 JS 将 getter 保留在基类中" - No, it's by design.
标签: javascript extend es6-class boilerplate