2015-09-11 1 views
36

Sto giocando con le nuove cose in JavaScript/ES6. Ottengo un Uncaught ReferenceError: this is not defined(...) player.js:5 nel mio codice. Per quanto vedo, non ci sono errori qui! è un insetto? Qualche soluzione alternativa?"Uncaught ReferenceError: this is not defined" nel costruttore della classe

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

Mi manca qualcosa o non hai mai dichiarato 'inizializza' ovunque ??? – Bergi

+0

Era il codice vecchio e irrilevante che è stato lasciato nel mio errore. – bshaw

+1

Possibile duplicato di [JavaScript ES6 classe estesa senza super] (http://stackoverflow.com/questions/31067368/javascript-es6-class-extend-without-super) – Makyen

risposta

61

Questo è un dato di fatto la nuova sintassi di classe. La sottoclasse deve chiamare super() per poter inizializzare correttamente la classe, ad es.

super(arg1, arg2, argN); 

con qualsiasi argomento richiesto dal costruttore genitore.

È necessario che, se l'esecuzione raggiunge la fine di una funzione constructor, il valore di this deve essere stato inizializzato su qualcosa. È necessario essere in una classe base (dove this è inizializzato automaticamente), hanno chiamato super() in modo da inizializzare this o return ed un oggetto alternativo.

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

Si può pensare ad esso come constructor funzioni sorta di avere un automatico return this alla fine del loro.