javascript - es6类和多级继承

标签 javascript ecmascript-6

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();

https://jsfiddle.net/jwm5xjcp/

关于javascript - es6类和多级继承,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37374317/

相关文章:

javascript - 我应该在哪里存储我的 React 可重用组件?

javascript - 仅从对象 javascript 数组中过滤唯一值

javascript - countUp() 和 countUp 之间的区别

javascript - 定位嵌入式 YouTube 播放器

javascript - 将 HTML 加载到 DIV 中,但保留 CSS,JS 包含

javascript - 将字符串解析为 JSON,键和键值上带有单引号

javascript - Puppeteer: "The information you’ 重新提交不安全”

javascript - 将其传递给 window.onscroll 函数

javascript - 如何中止获取请求?

javascript - ES6 类与 ES5 风格有多少不同?