2013-05-18 68 views
4

因此,這裏的對象「playerTurnObj」遺漏的類型錯誤:對象#<object>沒有方法「方法」

function playerTurnObj(set_turn) { 
    this.playerTurn=set_turn; 
    function setTurn(turnToSet) { 
     this.playerTurn=turnToSet; 
    } 
    function getTurn() { 
     return this.playerTurn; 
    } 
} 

,這裏是什麼,我用它做

var turn = new playerTurnObj(); 
turn.setTurn(1); 

所以我儘量使腳本在playerTurnObj()中執行setTurn()方法來保存我正在製作的遊戲中的「轉向」。問題是,它沒有做turn.setTurn(1);部分是因爲我不斷收到上面的錯誤

我做錯了什麼?我搜查了,但我無法找到我的問題的確切答案。

回答

1

這不是JavaScript的工作方式。您的「構造函數」函數包含在playerTurnObj範圍外不可見的內聯函數。因此,您的變量turn沒有定義方法setTurn,因爲錯誤消息正確表示。也許你想是這樣的:

function playerTurnObj(set_turn) { 
    this.playerTurn=set_turn; 
} 

playerTurnObj.prototype = { 
    setTurn: function(turnToSet) { 
     this.playerTurn=turnToSet; 
    }, 
    getTurn: function() { 
     return this.playerTurn; 
    } 
}; 

現在你的變量turn有兩個方法setTurn,並且對你new創建的實例操作getTurn

+0

感謝,這工作:) – user2304057

+0

其他建議這裏做的工作太,有很多方法可以實現這一點。 Usind原型的優點是不會爲每個實例填充內存。 – migg

1

setTurngetTurn函數是私有的,因此它們返回undefined而不是調用該函數。你可以這樣做:

function playerTurnObj(set_turn) { 
    this.playerTurn=set_turn; 
    this.setTurn = setTurn; 
    this.getTurn = getTurn; 

    function setTurn(turnToSet) { 
     this.playerTurn=turnToSet; 
    } 
    function getTurn() { 
     return this.playerTurn; 
    } 
} 

你就必須publicsetTurngetTurn方法,可以調用它們如下:

var turn = new playerTurnObj(); 
turn.setTurn(1); 

http://jsfiddle.net/Ht688/

0

我做出來的是什麼,你需要返回在函數playerTurnObj()中對象。所以,你的新的代碼看起來是這樣的:

function playerTurnObj(set_turn) { 
    this.playerTurn=set_turn; 
    function setTurn(turnToSet) { 
     this.playerTurn=turnToSet; 
    } 
    function getTurn() { 
     return this.playerTurn; 
    } 
    return this; 
} 
相關問題