无法理解Javascript方法

时间:2016-02-26 00:54:07

标签: javascript function methods

这是我目前的任务:

  1. 添加一个可以增加其中一个数字属性值的方法。
  2. 添加一个会降低相同数字属性值的方法。
  3. 创建角色实例后创建for循环。循环将迭代100次。
  4. 在循环内部调用基于0到3的随机数的方法之一。使用switch语句,如果值为0则调用丢失的方法; 1不要打电话; 2调用获得的方法。
  5. 这是我目前的编码。我知道我做错了什么。我只是无法弄清楚我对switch语句做错了什么。

     var BR = "<br />";
    
    function person(name, sandwiches) {
    this.name = name;
    this.sandwiches = sandwiches;
    
    
    function jump() {
        var text = " leaps over an obstacle.";
        return fname + text;
        }
    
    function run() {
        var text = " runs as fast as they can";
        return fname + text;
        }
    
    function dodge() {
        var attack = math.random();
        var att = math.round(attack);
        var defense = math.random();
        var def = math.round(defense);
        if(att > def) {
            return "You missed";
        }
        else {
            return "You dodged";
        }
    }
    
    function date() {
        var today = new Date();
        return today.toDateString();
    }
    
    function shout() {
        var word = "Oh no";
        return word.toUpperCase();
    }
    
    this.addSandwich = function (sandwiches) {
        sandwiches = sandwiches + 1;
        return sandwiches;
    };
    
    this.loseSandwich = function (sandwiches) {
        sandwiches = sandwiches - 1;
        return sandwiches;
    };
    
    
    }
    
        var character = new person("Jerry", 1);
    
        for(i=0; i < 100; i++) {
            var random = Math.floor(Math.random() * 3);
    
            switch(random) {
                case 0:
                    character.loseSandwich(character.sandwiches);
                    console.log(sandwiches);
                    break;
    
                case 1:
                    break;
    
                case 2:
                    character.addSandwich(character.sandwiches);
                    break;
            }
        }
    
        document.write("Name: " + character.name + BR);
        document.write("Sandwiches: " + character.sandwiches + BR);
    

2 个答案:

答案 0 :(得分:0)

Math.floor(Math.random()* 3)不是你想要的。

你希望像Math.random()%3这样的东西每次都能获得0,1或2

答案 1 :(得分:0)

不确定这是否是您的问题,但至少是其中之一;

在少数地方,您使用小写math,例如:

function dodge() {
    var attack = math.random();

JavaScript区分大小写,应该是Math.random()而不是math.random()

另一个问题是这些功能:

this.addSandwich = function (sandwiches) {
    sandwiches = sandwiches + 1;
    return sandwiches;
};

不要改变三明治的数量。你得到三明治的值,加1或减1,然后返回改变的数字,但从不使用返回的结果。 您只是更改传入的变量的值,而不是更改人员实例上的三明治数。

请注意this.sandwichesperson实例上的变量)与sandwiches(函数参数)不是同一个变量

我认为没有任何理由将三明治的数量传递给这些功能,他们可以这样做:

this.addSandwich = function () {
    this.sandwiches = this.sandwiches + 1;
};

或更简单:

this.addSandwich = function () {
    this.sandwiches++;
};

这里的另一个问题是:

            character.loseSandwich(character.sandwiches);
            console.log(sandwiches);

console.log语句正在尝试记录sandwiches,但此时不是变量。您可能想要console.log(character.sandwiches);但是这不会导致异常,它只会始终记录undefined