0

我一直在 codecademy 中研究 Javascript,并且对其中一个问题有疑问。

问题:

写两个函数:

one creates an object from arguments
the other modifies that object

我的答案:

//First, the object creator
function makeGamePlayer(name,totalScore,gamesPlayed) {
    //should return an object with three keys:
    // name
    // totalScore
    // gamesPlayed
    var myObject = {
     "name": name,
     "totalscore" : totalscore,
     "gamesPlayed" : gamesPlayed
    };
  return myObject;
}

//Now the object modifier
function addGameToPlayer(player,score) {
    //should increment gamesPlayed by one
    //and add score to totalScore
    //of the gamePlayer object passed in as player
    var score = player[totalscore];
    score =score+1;
    player[totalscore] = score;
}

不知道我的错误在哪里。需要一些有关改进此解决方案的指导。非常感谢...

4

4 回答 4

4

在您的对象中,您永远不会分配分数

"totalscore" : totalscore,

应该

"totalscore" : totalScore

既然你进来了totalScore

于 2012-08-10T15:01:30.473 回答
3

您也没有正确访问该对象

var score = player.totalscore;

或者

var score = player["totalscore"];

它需要一个字符串,但您传递的是一个未定义的变量。

您还在score函数中定义了两次,为内部变量使用不同的名称。

于 2012-08-10T15:03:03.643 回答
1

参数 tomakeGamePlayer已命名totalScore,但您使用totalscoremyObject是不同的名称 - 大小写很重要。

addGameToPlayer您在尝试使用名为totalscore但未定义的变量时也遇到问题

于 2012-08-10T15:03:14.823 回答
0

除了错字和您的代码相当愚蠢和毫无意义的 IMO(对不起,谷歌 Douglas Crockford JavaScript Object 或其他东西并阅读什么是 powerconstructor)之外,我认为您想检查是否所有参数都传递给函数。如果是这样的话:

function foo (bar, foobar)
{
    if (arguments.length < 2)
    {
        throw new Error('foo expects 2 arguments, only '+arguments.length+' were specified');
    }
    //or - default values:
    bar = bar || 'defaultBar';
    //check the type?
    if (typeof bar !== 'string' || typeof foobar !== 'number')
    {
        throw new Error ('types don\'t match expected types');
    }
}

等等......但是,请阅读并在提问时更加具体

于 2012-08-10T15:13:57.343 回答