所以这是我能想到的最简单的版本。我知道为什么会发生这种情况,但我不知道解决它的最佳方法。
class TestParent {
variableA = ""
constructor(data) {
for(const key in data) {
this[key] = data[key]
}
}
}
class Test extends TestParent {
variableB = ""
}
当我尝试此代码时...
let test = new Test({"variableB": "something"})
// Expected {"variableA": "", "variableB": "something"}
// Got {"variableA": "", "variableB": ""}
现在,如果我从variableB
类中删除Test
,则代码可以正常工作。从我的代码中得出的结论是,TestParent
的构造函数正在执行它的工作,但是一旦调用Test
的构造函数,它将使用存储在原型中的默认属性覆盖该属性?
我该如何保存在TestParent
构造函数中所做的事情。无需在类范围内定义属性,我只需要在构造函数本身中定义它?我是否缺少添加到该属性的关键字?
答案 0 :(得分:2)
如果不希望覆盖variableB: 'something'
,则应在variableB
中更改分配给Test
的代码部分。仅在该属性尚不存在时,才将空字符串分配给variableB
:
variableB = this.variableB || ''
class TestParent {
variableA = ""
constructor(data) {
for (const key in data) {
this[key] = data[key];
}
}
}
class Test extends TestParent {
variableB = this.variableB || ''
}
const test = new Test({
variableB: "something"
});
console.log(test);
(或者,如果您也想保留虚假值,请variableB = this.variableB === undefined ? '' : this.variableB
)