Brett Brett - 1 year ago 115
Javascript Question

"Uncaught ReferenceError: this is not defined" in class constructor

I am playing with the new stuff in JavaScript/ES6. I get an

Uncaught ReferenceError: this is not defined(...) player.js:5
in my code. As far as I see, there are no errors here! Is this a bug? Any workarounds?


<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">
<canvas id="screen" width=500 height=500></canvas>
<script type="text/javascript">initialize();</script>


"use strict";

class Entity {
constructor() {


"use strict";

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

Answer Source

This is a fact of the new class syntax. Your subclass needs to call super() in order for the class to be properly initialized, e.g.

super(arg1, arg2, argN);

with whatever arguments the parent constructor needs.

It is required that, if execution reaches the end of a constructor function, the value of this needs to have been initialized to something. You either need to be in a base class (where this is auto-initialized), have called super() so this is initialized, or returned an alternative object.

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

You can think of it like constructor functions kind of have an automatic return this at the end of them.

Recommended from our users: Dynamic Network Monitoring from WhatsUp Gold from IPSwitch. Free Download