【问题标题】:"Uncaught ReferenceError: this is not defined" in class constructor类构造函数中的“未捕获的 ReferenceError:未定义”
【发布时间】:2015-12-07 14:04:08
【问题描述】:

我正在玩 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
    }
}

【问题讨论】:

标签: javascript ecmascript-6


【解决方案1】:

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

super(arg1, arg2, argN);

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

要求,如果执行到constructor 函数的末尾,this 的值需要已经初始化为某个值。你要么需要在一个基类中(this 是自动初始化的),已经调用了super() 所以this 被初始化,或者returned 一个替代对象。

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

你可以把它想象成constructor 函数的末尾有一个自动的return this

【讨论】:

    猜你喜欢
    • 2022-01-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-01-25
    • 2017-06-17
    • 1970-01-01
    相关资源
    最近更新 更多