2015-09-11 95 views
36

我正在玩JavaScript/ES6中的新東西。我的代碼中有一個Uncaught ReferenceError: this is not defined(...) player.js:5。據我所知,這裏沒有錯誤!這是一個錯誤?任何解決方法?「Uncaught ReferenceError:this is not defined」in class constructor

的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

我錯過了什麼,或者你從來沒有聲明'initialize'任何地方? – Bergi

+0

這是舊的和不相干的代碼,留在我的錯誤。 – bshaw

+1

可能的重複[Javascript ES6 class extend without super](http://stackoverflow.com/questions/31067368/javascript-es6-class-extend-without-super) – Makyen

回答

61

這是新的類語法的事實。您的子類需要調用super()才能正確初始化該類,例如,

super(arg1, arg2, argN); 

與父構造函數需要的任何參數。

需要的是,如果執行到達constructor函數的末尾,則需要將this的值初始化爲某個值。您或者需要在基類中(其中this是自動初始化的),已經調用了super(),因此this被初始化,或者return被編輯爲另一個對象。

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

你可以認爲它像constructor職能那種具有自動return this他們結束。

相關問題