【发布时间】:2021-11-15 08:42:15
【问题描述】:
我在编写代码时遇到了这种情况,我无法理解。
场景如下:我有一个来自我正在扩展的库的类。 这个类是“父”类。它允许它的子类覆盖 init 方法以进行自定义初始化。
然而,第二个子类的行为并不像我预期的那样。两个类之间的唯一区别是成员变量的声明(?)。在编写纯 JS 时,我什至不会考虑这样做,但我正在用 Typescript 编写,这是编译后的结果(实际上,在我的特定情况下,我什至没有分配值。TS 编译器只包含一个“成员; " 并且输出显示为 "未定义)
我很确定这个问题只发生在当变量设置在由父构造函数调用的覆盖函数中时。
有人可以向我解释为什么会这样吗?
class Parent {
constructor(initArgs) {
this.init(initArgs);
}
init() {}
}
class ChildTest1 extends Parent {
init(args) {
this.member = args;
}
test() {
console.log(`Member of ChildTest1 has value of "${this.member}"`);
}
}
class ChildTest2 extends Parent {
member = "default";
init(args) {
this.member = args;
}
test() {
console.log(`Member of ChildTest2 has value of "${this.member}"`);
}
}
new ChildTest1("Hello World").test();
new ChildTest2("Hello World").test();
输出以下内容:
ChildTest1 的成员的值为“Hello World”
ChildTest2 成员的值为“default”
【问题讨论】:
标签: javascript typescript es6-class