如何在ES6中禁用此错误?错误:在派生类构造函数中调用super之前无法引用“ this”

时间:2019-03-22 02:25:02

标签: es6-class

在像C ++这样的面向对象的语言中,您不必调用基本构造函数。我不明白为什么我需要使用像javascript这样的伪面向对象语言来做到这一点。我的基本构造函数具有虚拟元素,在调用它之前需要对其进行设置。构造函数在ES5中运行良好,为什么要在此限制下破坏它们。此错误是垃圾邮件,应将其删除。

1 个答案:

答案 0 :(得分:0)

在C ++中,编译器会在调用派生类构造函数之前创建代码来为您调用基本构造函数。您的C ++派生类定义可以指定要调用的基本构造函数以及要传递的内容(如果可以选择)。 这就是C ++规范的编写方式。请参见简短说明here

Javascript ES6类不能完全相同地工作。您必须在代码中插入一个用super(...)调用基本构造函数的位置,并且可以指定或计算要传递给基本构造函数的参数。

在C ++和Javascript中,您都无法在调用基本构造函数之前访问自己的实例方法或属性。

仅供参考,Java甚至是more restrictive than Javascript。您必须作为构造函数的第一条语句调用super()this()。至少可以使用Javascript在调用构造函数之前放置不使用this的逻辑。


在Javascript中,如果不重写代码以其他方式工作,就无法停止此错误。您可以禁用这不是一个错误。

有充分的OOP原因(无论您是否同意),直到完全初始化所有基类之前才允许引用对象。或者,您可以回到ES6之前的初始化对象的方式,在这种方式中,您无法控制操作方式,并且可以执行任何您想做的事情。

如果您向我们展示代码并说明您要执行的操作,我们可能会建议采用其他设计来解决您的问题,而不会出现此问题。