【发布时间】:2016-09-16 09:14:02
【问题描述】:
我有以下代码结构,我尝试通过调用 super() 来初始化父类,但是当我调用 this._init() 时,它调用了子类。任何帮助我该如何解决这个问题?
class Parent {
constructor() {
console.log('P constructor()');
this._init();
}
_init() {
console.log('P _init()');
this.parentProp = 'parent';
}
}
class Child extends Parent {
constructor() {
console.log('C constructor');
super();
this._init();
}
_init() {
console.log('C _init()');
this.childProp = 'child';
}
test() {
console.log(this.childProp + ' ' + this.parentProp);
}
}
let child = new Child();
child.test();
这是上面代码的输出:
C constructor()
P constructor()
C _init()
C _init()
child undefined
【问题讨论】:
-
你不能。您覆盖了方法,因此初始方法不再可用。
-
我除了调用 super._init() 之外别无他法,我认为这不是一个好习惯,因为它属于父类。
-
“我认为这不是一个好的做法”——您的考虑与常见做法不一致。从子类调用基类方法并没有错。
-
“调用 super._init() 我认为这不是一个好习惯” 也不是调用
this._init()。
标签: javascript inheritance ecmascript-6 babeljs