"未捕获的ReferenceError:未定义"在类构造函数中

时间:2015-09-11 05:39:10

标签: javascript ecmascript-6

我正在玩JavaScript / ES6中的新东西。我的代码中有一个Uncaught ReferenceError: this is not defined(...) player.js:5。据我所知,这里没有错误!这是一个错误吗?任何解决方法?

的index.html

<html>
    <head>
        <script type="text/javascript" src="js/entity.js"></script>
        <script type="text/javascript" src="js/player.js"></script>
        <link href="css/style.css" rel="stylesheet" type="text/css">
        <title>Test</title>
    </head>
    <body>
        <canvas id="screen" width=500 height=500></canvas>
        <script type="text/javascript">initialize();</script>
    </body>
</html>

entity.js

"use strict";

class Entity {
    constructor() {
        console.log("Entity");
    }
}

player.js

"use strict";

class Player extends Entity {
    constructor() {
        console.log("Created"); // <- error here
    }
}

1 个答案:

答案 0 :(得分:63)

这是新类语法的一个事实。您的子类需要调用super()才能正确初始化类,例如

super(arg1, arg2, argN);

使用父构造函数需要的任何参数。

如果执行到达constructor函数的末尾,则需要将this的值初始化为某个值。您需要在基类中(this自动初始化),调用super()以便this初始化,或return编辑替代对象。 / p>

class Player extends Entity {
  constructor() {
    super();
    console.log("Created"); ;// error here
  }
}

您可以将其视为constructor函数,它们最后会有一个自动return this