我在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()