2016-01-11 62 views
0

我一直在JavaScript中創建類時遇到了一些麻煩。我已經看了很多例子,但似乎無法讓它們成爲我理解的東西。下面不會出現alerts()JavaScript類方法沒有被執行

function Player(){ 

    function run(){ 

     alert('run'); 
     self.update(); 
     self.draw(); 

    } 

    function draw(){ 
     alert('draw'); 
    } 

    function update(){ 
     alert('update'); 
    } 

} 

var player1 = new Player(); 
player1.run(); 
+2

檢查你的JavaScript錯誤控制檯,它告訴你到底發生了什麼錯誤。 – meagar

+0

構造函數,而不是類 –

+0

我沒有在控制檯中得到錯誤。我需要通過託管網站的服務器服務來更改設置嗎? – dyllandry

回答

3

使用self.name添加的功能=函數(){}

function Player(){ 
    var self = this; 
    self.run = function(){ 

     alert('run'); 
     self.update(); 
     self.draw(); 

    } 

    self.draw = function(){ 
     alert('draw'); 
    } 

    self.update = function(){ 
     alert('update'); 
    } 

} 

var player1 = new Player(); 
player1.run(); 
+0

我從來不知道我必須將'self'聲明爲'this',我以前從來沒有這樣做過。感謝你的回答。 – dyllandry

+0

沒問題! 將'this'的原始值存儲在一個變量中是很方便的,所以內部函數可以引用它。這些內部函數得到自己的'this',所以'this.update();'如果它在run函數內部是行不通的。 – IrkenInvader

0

語法是有點偏離..

function Player(){ 

    this.run = function(){ 

     alert('run'); 
     self.update(); 
     self.draw(); 

    } 

    .... 
} 

做所有這些類似..

0

您可以利用以下模式之一實現此目的...

function Player() { 
    this.run = function() { 
     /*...*/ 
    } 
} 

function Player() { 
    function run() { 
     /*...*/ 
    } 

    return { 
     run: run 
    } 
} 

function Player() { 
} 

Player.prototype.run = function() { 
    /*...*/ 
}; 

有關這些模式的更深層次的閱讀,看看這個漂亮的書面記錄:3 ways to define a JavaScript class

0

至於其他的答案已經指出的那樣,內部功能作爲實際課程的一部分沒有被暴露(即他們不是公衆方法)。

定義如下類的公共方法:

function Player(){ 

    //PUBLIC! 
    this.run = function(){ 
     //... 
    } 

    //NOT PUBLIC 
    function update(){ 
     //... 
    } 
} 
0

因爲它看起來像你正在做遊戲的發展,你會想採取一些更多的JavaScript爲中心的面向對象編程範式。如果您正在創建一個類,請在原型上定義實例方法,而不是函數本身。

爲什麼?因爲當你調整你的遊戲性能時,每一個毫秒或者一點點的內存都是非常重要的(除非你正在製作一個井字遊戲或者一些微不足道的遊戲)。但這是一個好習慣。

function Player(){} 

Player.prototype.run = function(){ ... } 
Player.prototype.draw = function(){ ... } 
Player.prototype.update = function(){ ... } 

var player1 = new Player(); 
player1.run();