有人能解释一下,为什么子类公共实例字段不能在父构造函数之前在父props上设置(在实例化过程中都是已知的)?Ofc,你可以通过父构造函数覆盖公共字段,但对我来说,这比在构造函数之前设置一次,然后在super()之后为子字段设置一次更清楚。是否存在语言障碍?
当这个提议出现时,我以为这就是整个事情的目的(只是在构造函数之前声明)。
假设,我得到了一个带有构造函数的基类,它对所有子类都是一样的。因为构造函数可以接受参数,在某些情况下,我想尽可能简单地初始化类,比如
new MyClass(args)
class Person {
// public fields initialized before constructor
age
gender
etc
constructor(input) {
setProps() // empty
parse(input)
}
setProps() {}
parse() {
// get age, gender, etc
}
}
new Person(input) // works
对于子类,老派的js方法要么用super()重写构造函数,后跟子类part,要么调用类似
setProps()
(在我看来,两者都像是编码开销)
class Student extends Person {
setProps() {
this.lessons = []
}
parse(input) {
super.parse.call(this, input);
input.forEach(row => this.lessons.append(row.something))
}
}
new Student(input) // works
对于子类公共实例字段,我得到以下结果
doc
说)
class Student extends Person {
// public fields initialize after super()
lessons = []
parse(input) {
super.parse.call(this, input);
input.forEach(row => this.lessons.append(row.something))
}
}
new Student(input) // throws error because this.lessons is undefined
我是否错过了上面没有提到的方法?