Подтвердить что ты не робот

"Неподготовлено ReferenceError: это не определено" в конструкторе класса

Я играю с новым материалом в 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
    }
}
4b9b3361

Ответ 1

Это факт синтаксиса нового класса. Подкласс должен вызвать super(), чтобы класс был правильно инициализирован, например

super(arg1, arg2, argN);

с любыми аргументами, которые требуется родительскому конструктору.

Требуется, чтобы, если выполнение достигает конца функции constructor, значение this должно быть инициализировано чем-то. Вы либо должны находиться в базовом классе (где this автоматически инициализируется), вызвали super(), поэтому инициализируется this, или return ed альтернативный объект.

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

Вы можете думать об этом как функции constructor, у которых есть автоматический return this в конце их.