Javascript基类构造函数使用子类(重写)属性运行



我在JS中有子类重写类属性的问题。我认为在OOP中的行为是我想要的,但我希望在JS中实现相同的。

class Base {
constructor () {
console.log(this.a)
}
}
class Child extends Base {
a = 1
}
new Child()
// undefined, but I expect (want) 1

如何修改我的代码来记录1?

Python中的例子:

class Base:
def __init__(self):
print(self.a)

class Child(Base):
a = 1

Child()
# 1 -> desirable

undefined输出是预期的行为。您没有在基类中定义属性a,因此基类构造函数在控制台中输出undefined是很自然的。

class Base {
constructor () {
console.log('Base constructor', this.a) // outputs undefined
}
}
class Child extends Base {
a = 1
constructor () {
super();
console.log('Child constructor', this.a); // outputs 1
}
}
new Child()

在Python中,__init__函数不是一个真正的构造函数。构造函数是__new__

我最后是这样做的:

class Base {
constructor () {
console.log(this.a)
}
}
class Child extends Base {
get a () { return 1 }
}
new Child()

最新更新