如何在ES6中禁用此错误?错误:在派生类构造函数中调用super之前,不能引用'this'

问题描述 投票:0回答:1

在像C ++这样的面向对象语言中,您不必调用基础构造函数。我不明白为什么我需要在像favascript这样的伪对象语言中做这件事。我的基础构造函数具有在调用它之前需要设置的虚拟元素。构造函数在ES5中运行良好,为什么要用这个限制来破坏它们。这个错误是垃圾,应该删除。

es6-class
1个回答
0
投票

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

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

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

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


在您的Javascript中,如果不重写代码以不同的方式工作,则无法阻止此错误。这不是你可以禁用的错误。

有效的OOP原因(无论您是否同意)在所有基类完全初始化之前不允许引用对象。或者,您可以回到ES6之前初始化对象的方式,在这种方式中,您无法控制自己的操作方式,并且可以随心所欲地执行任何操作。

如果您向我们展示您的代码并解释您正在尝试做什么,我们可能会建议一种不同的设计来解决您的问题并且没有这个问题。

© www.soinside.com 2019 - 2024. All rights reserved.