为什么我的javascript对象方法返回undefined?

时间:2014-01-09 16:00:55

标签: javascript oop

我也是javascript oop和游戏编程的初学者(!)。 在这里,我用方法创建了一个游戏玩家。但该方法返回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();
});

6 个答案:

答案 0 :(得分:3)

您的班级中没有bobsGame.player1,您只是为变量player1实例化了一个新实例?

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

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

FIDDLE

答案 1 :(得分:2)

您的来电应该是player1.rollDice()

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

您对bobsGame对象的player属性与实际创建的player1对象感到困惑。

答案 2 :(得分:2)

这可能会更好一点

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

答案 3 :(得分: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

答案 4 :(得分: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();

答案 5 :(得分: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();
});