es6类的多级继承有限制吗?我正在向框架/外部类添加一些附加功能。
class B extends External.A {
// ...
}
class C extends B {
// ...
}
并像这样使用
const result = new C(data);
给出错误
TypeError: Class constructor B cannot be invoked without 'new'
但是,如果我直接使用class A
,就没有错误
class C extends External.A {
// ...
}
const result = new C(data);
//工作正常
编辑:
我使用 "babel": "^6.5.2"
来转换所有内容。在实际代码中,所有 3 个类都位于不同的文件中,并使用模块系统来导出和导入它们。如果这很重要。
最佳答案
原始答案
你的问题的基本原理就像魅力一样。
可能您的代码在 constructor()
super()
class A {
constructor() {
document.write('from A <br/>');
}
}
class B extends A {
constructor() {
super();
document.write('from B <br/>');
}
}
class C extends B {
constructor() {
super();
document.write('from C <br/>');
}
}
new C();
这是你可以玩的 fiddle :https://jsfiddle.net/nkqkthz2/
编辑
在您最初的问题中,您将一些数据传递给 C 类构造函数 new C(data);
,然后如果您想在您的类链中处理它,您应该编写自己的构造函数:
class A {
constructor(data) {
document.write(`${data} A <br/>`);
}
}
class B extends A {
someFunc() {
//
}
}
class C extends B {
constructor(data) {
super(data);
this.data = data;
}
write() {
document.write(`${this.data} C <br/>`);
}
}
const c = new C('test');
c.write();
https://jsfiddle.net/rwqgm9n0/
请注意,B 类不需要指定构造函数,因为默认构造函数是:
constructor(...args) {
super(...args);
}
这可以将数据传递给 A 类构造函数。
如果您在 C 类构造函数中省略了 super,则较新的将数据传递给 A 类可能会产生错误。
class A {
constructor(data) {
document.write(`${data} A <br/>`);
}
}
class B extends A {
someFunc() {
//
}
}
class C extends B {
constructor(data) {
//super(data);
this.data = data;
}
write() {
document.write(`${this.data} C <br/>`);
}
}
const c = new C('test');
c.write();
关于javascript - es6类和多级继承,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37374317/