2014-01-09 38 views
0

我是一個JavaScript腳本和遊戲編程的初學者(!)。 在這裏我創建了一個方法的遊戲玩家。但該方法返回undefined。這是爲什麼?爲什麼我的JavaScript對象方法返回undefined?

bobsGame = {}; 

bobsGame.player = function(which){ 
    this.which = which; 
    this.rollDice = function() { 
    diceVal = Math.floor(Math.random() * 6 + 1); 
    console.log(diceVal); 
    return diceVal; 
    } 
} 

var player1 = new bobsGame.player('player1'); 

,然後在標記...

$('#roll-dice-btn-1').click(function(){ 
    bobsGame.player1.rollDice(); 
}); 
+2

有太多的不連貫的東西在這裏。例如,在哪裏定義了'bobsgame.player1'?你能建立一個工作小提琴展示你的問題? –

回答

1

bobsGame.player1是不確定的,因爲player1沒有對象bobsGame內聲明。

如果要將player1作爲bobsGame對象中的鍵創建,則必須改爲使用bobsGame.player1 = new bobsGame.player('player1');。所以你的代碼如下所示: bobsGame = {};

bobsGame.player = function(which){ 
    this.which = which; 
    this.rollDice = function() { 
    diceVal = Math.floor(Math.random() * 6 + 1); 
    console.log(diceVal); 
    return diceVal; 
    } 
} 

var player1 = new bobsGame.player('player1'); 

否則,您可以使用:

$('#roll-dice-btn-1').click(function(){ 
    player1.rollDice(); 
}); 
2

您的電話應該是player1.rollDice()

$('#roll-dice-btn-1').click(function(){ 
    player1.rollDice(); 
    }); 

你bobsGame對象的player屬性和player1之間的混淆您實際創建的對象。

3

你的班級裏沒有bobsGame.player1,你只是給變量player1增加一個新實例?

var player1 = new bobsGame.player('player1'); 

$('#roll-dice-btn-1').click(function(){ 
    player1.rollDice(); 
}); 

FIDDLE

+0

這個。您目前不在所創建的'player1'對象上調用'rollDice()'方法。 – egl

+0

@egl - 那我打電話給我? – adeneo

+0

你的回答很好,指OP不正確地調用該方法。 – egl

2

這可能工作好一點

bobsGame.player1 = new bobsGame.player('player1'); 
+1

你爲什麼要把這個班級安排到自己的房產? – adeneo

+0

或者只是完全取代bobsGame –

1

你可以用這樣的結構發揮:

bobsGame = function(opts) { 
    this.player = opts.player; 
    this.diceVal = 0; 
} 

bobsGame.prototype.rollDice = function(){ 
    this.diceVal = Math.floor(Math.random() * 6 + 1); 
} 

而在你的主文件:

var player1 = new bobsGame({player: 'player1'}); 
$('#roll-dice-btn-1').click(function(){ 
    player1.rollDice(); 
    console.log(player1.diceVal); 
}); 

JsFiddle

1

你的小問題。它不能在你的課堂上找到bobsGame.player1。所以改變這樣的,它會工作得很好..

bobsGame.player = function(which){ 
    this.which = which; 

    this.rollDice = function(){ 
     diceVal = Math.floor(Math.random() * 6 + 1); 
     console.log(diceVal); 
     return diceVal; 
    } 
} 


    var player1 = new bobsGame.player('player1'); 
    player1.rollDice();