解决在 ECMAScript 2021 中使用 class 时出现的各种报错

在 ECMAScript 2021 中,class 已经成为一种常见的面向对象编程的方案,但是在实际使用中,我们可能会遇到各种各样的报错,本文将介绍一些在使用 class 时出现的常见报错,并提供解决方案和示例代码。

报错一:ReferenceError: Must call super constructor in derived class before accessing 'this' or returning from derived constructor

这个错误是由于在派生类的构造函数中没有调用 super() 造成的,例如:

----- ------ -
  ----------------- -
    --------- - -----
  -
-

----- --- ------- ------ -
  ------------- -
    --------- - -------
  -
-

----- ----- - --- ------
------------------- -- ------- ---- ----- ----------- -- ------- ----- ------ --------- ------ -- --------- ---- ------- -----------

解决方法是在子类构造函数中调用 super()

----- ------ -
  ----------------- -
    --------- - -----
  -
-

----- --- ------- ------ -
  ----------------- -
    ------------ -- ----------
    --------- - -------
  -
-

----- ----- - --- -------------
------------------- -- ---- ----- -------- ----- ------ -

报错二:TypeError: Class constructor Animal cannot be invoked without 'new'

这个错误是由于在创建实例时,没有使用 new 关键字造成的,例如:

----- ------ -
  ----------------- -
    --------- - -----
  -
-

----- ----- - ---------------- -- ------------- ----- ----------- ------ ------ -- ------- ------- -----

解决方法是调用时使用 new 关键字:

----- ------ -
  ----------------- -
    --------- - -----
  -
-

----- ----- - --- ----------------
------------------- -- ---- ----- ------- -

报错三:TypeError: Cannot set property 'xxx' of undefined

这个错误是由于在子类构造函数中访问父类属性时,没有正确调用 super() 造成的,例如:

----- ------ -
  ----------------- -
    --------- - -----
  -
-

----- --- ------- ------ -
  ----------------- -
    --------- - -------
    ------------
    ---------- - ------------- ---- --------------
  -
-

----- ----- - --- ------------- -- ------------- ------ --- -------- ------- -- ---------

解决方法是先调用 super(),再访问父类属性:

----- ------ -
  ----------------- -
    --------- - -----
  -
-

----- --- ------- ------ -
  ----------------- -
    ------------
    --------- - -------
    ---------- - ------------- ---- --------------
  -
-

----- ----- - --- -------------
------------------------- -- -------- ---- ----

报错四:TypeError: xxx is not a constructor

这个错误是由于在创建实例时,类名没有正确引用造成的,例如:

----- ------ -
  ----------------- -
    --------- - -----
  -
-

----- ----- - --- ------------- -- ------------- --- -- --- - -----------

解决方法是类名大小写要与定义时一致:

----- ------ -
  ----------------- -
    --------- - -----
  -
-

----- ----- - --- ----------------
------------------- -- ---- ----- ------- -

结论

在使用 class 时,遇到这样的错误并不是什么大问题,只需要仔细查看错误信息并引用示例代码中的解决方法,你就能轻松地解决问题了。同时,还要多多练习,熟悉 ECMAScript 2021 中的 class 用法,才能更好地运用它进行编程。

来源:JavaScript中文网 ,转载请注明来源 本文地址:https://www.javascriptcn.com/post/670d83095f551281025d6c2f