2014-01-09 3 views
0

Я тоже начинаю как в javascript oop, так и в игровом программировании (!). Здесь я создал игровой плеер с помощью метода. но метод возвращает undefined. почему это ?,Почему мой метод объекта javascript не возвращается?

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(); 
    }); 

Вы смущены между player свойства объекта bobsGame и player1 объект, который вы на самом деле создали.

3

В вашем классе нет bobsGame.player1, вы просто инициировали новый экземпляр переменной player1?

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

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

FIDDLE

+0

Это. Вы в настоящее время не вызываете метод 'rollDice()' на созданном вами объекте 'player1'. – 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(); 
Смежные вопросы