2015-09-11 5 views
36

Ich spiele mit den neuen Sachen in JavaScript/ES6. Ich bekomme eine Uncaught ReferenceError: this is not defined(...) player.js:5 in meinem Code. Soweit ich sehe, gibt es hier keine Fehler! Ist das ein Fehler? Irgendwelche Problemumgehungen?"Uncaught ReferenceError: das ist nicht definiert" im Klassenkonstruktor

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

Fehle ich etwas oder hast du nie 'initialize' irgendwo erklärt ??? – Bergi

+0

Es war alter und irrelevanter Code, der in meinem Fehler verblieben war. – bshaw

+1

Mögliches Duplikat von [Javascript ES6 Klasse erweitern ohne Super] (http://stackoverflow.com/questions/31067368/javascript-es6-class-extend-without-super) – Makyen

Antwort

61

Dies ist eine Tatsache der neuen Klasse Syntax. Ihre Unterklasse muss super() aufrufen, damit die Klasse ordnungsgemäß initialisiert wird, z.

super(arg1, arg2, argN); 

mit allen Argumenten, die der Parent-Konstruktor benötigt.

Wenn die Ausführung das Ende einer constructor-Funktion erreicht, muss der Wert this auf etwas initialisiert sein. Sie müssen entweder in einer Basisklasse sein (this wird automatisch initialisiert), haben super() aufgerufen, also this initialisiert, oder return ed ein alternatives Objekt.

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

Sie es wie constructor Funktionen denken kann Art haben einen automatischen return this am Ende von ihnen.

Verwandte Themen