Javascript for循环变量

时间:2012-12-06 10:54:44

标签: javascript

我正在做一些简单的javascript学习,我一直坚持如何解决这个问题。 (基本形式来自Code Academy)。任务是创建3个兔子对象,每个对象具有不同的形容词作为属性。然后,为每只兔子打印describeMyself()

我没有重复自己3次,而是希望找到一种方法来解决问题,使用for循环使其更加简化/挑战自己。这是我试过的:

function Rabbit(adjective) {
    this.adjective = adjective;
    this.describeMyself = function() {
        console.log("I am a " + this.adjective + " rabbit");
    };
}

var rabbit1 = new Rabbit(fluffy);
var rabbit2 = new Rabbit(happy);
var rabbit3 = new Rabbit(sleepy);

for (i=1; i<=3; i++){
    ("rabbit"+i).describeMyself();
}

显然,("rabbit"+i).describeMyself()是错误的。我想循环创建“rabbit1”,“rabbit2”和“rabbit3”。这里的语法是什么?

8 个答案:

答案 0 :(得分:3)

首先,您传递的参数将导致未定义。如果要传递字符串,请使用引号将其标记为。其次,在for循环中创建新实例意味着您必须将它们存储在其他位置,例如在数组中。

var rabbits = [];
var descriptions = ['fluffy', 'happy', 'white', 'sleepy', 'dreamy'];
for (var i = 0; i < 5; i++) {
    rabbits.push(new Rabbit(descriptions[i]));
}

//Now you have 5 rabbits stored in the rabbits array. Now here's how to make them //egocentric.
for (var i = 0, ii = rabbits.length; i < ii; i++) {
    rabbits[i].describeMyself();
}


var rabbit1 = new Rabbit(fluffy);
var rabbit2 = new Rabbit(happy);
var rabbit3 = new Rabbit(sleepy);

为了将来参考,请不要忘记使用单引号或双引号标记HTML字符串。以上应该是:

var rabbit1 = new Rabbit('fluffy');
var rabbit2 = new Rabbit('happy');
var rabbit3 = new Rabbit('sleepy');

答案 1 :(得分:1)

由于兔子全局变量,它们是window对象的属性,所以你可以使用:

for (i=1; i<=3; i++){
    window["rabbit"+i].describeMyself();
}

<强>然而,

我建议使用已经建议的数组示例,因为这是一种不好的做法。 (但很高兴知道)

答案 2 :(得分:1)

认为这是一个hackish的答案,但如果你想在全局上下文中做到这一点,你可以避免使用数组并在窗口obejct上引用你的变量,如下所示:

var rabbit1 = new Rabbit('fluffy');
var rabbit2 = new Rabbit('happy');
var rabbit3 = new Rabbit('sleepy');

for (i=1; i<=3; i++){
    window["rabbit"+i].describeMyself();
}

更不用说更多 hackish and evil 方法与eval(只是把它放在那里作为参考):

for (i=1; i<=3; i++){
    eval("rabbit"+i+".describeMyself()");
}

答案 3 :(得分:1)

考虑使用变量数组,然后使用索引来访问它们

function Rabbit(adjective) {
    this.adjective = adjective;
    this.describeMyself = function() {
        console.log("I am a " + this.adjective + " rabbit");
    };
}

  var rabbit=[];

  rabbit[0]= new Rabbit("fluffy");
  rabbit[1]= new Rabbit("happy");
  rabbit[2]= new Rabbit("sleepy");


for (i=0; i<3; i++){

    rabbit[i].describeMyself();
}

答案 4 :(得分:0)

您不能直接引用变量,但可以将它们放在数组/对象中:

var rabbits = [];

rabbits[1] = new Rabbit('fluffy');
rabbits[2] = new Rabbit('happy');
rabbits[3] = new Rabbit('sleepy');

for (var i= 0; i < 3; i++){
    rabbits[i + 1].describeMyself();
}

答案 5 :(得分:0)

有时让对象自动添加到数组中会很有用。

​var rabbits = [];
function Rabbit(adjective) {
    this.adjective = adjective;
    this.describeMyself = function() {
        console.log("I am a " + this.adjective + " rabbit");
    };
    rabbits.push(this); // all new Rabbits get added to the array rabbits
}
new Rabbit('happy');
new Rabbit('sleepy');
new Rabbit('fluffy');

for (var i = 0; i < rabbits.length; i++) {
    rabbits[i].describeMyself();
}

答案 6 :(得分:0)

你很亲密,试试这个:

var attributes = ["fluffy","happy", "sleepy"];

for (i=1; i<=3; i++){
    window["rabbit"+i] = new Rabbit(attributes[i]);
}

for (i=1; i<=3; i++){
    eval(("rabbit"+i)).describeMyself();
}

答案 7 :(得分:-1)

尝试这一点,因为它完全正常,以便带出完美的结果&amp;这是代码:

function Rabbit(adjective)  {     
    this.adjective=adjective;     
    this.describeMyself = function() {         
         console.log("I am a " + this.adjective + " rabbit");
    }; 
}  

var rabbit1 = new Rabbit( "fluffy");
var rabbit2 = new Rabbit("happy"); 
var rabbit3 = new Rabbit("sleepy"); 

rabbit1.describeMyself(); 
rabbit2.describeMyself(); 
rabbit3.describeMyself();   

问题在于每个人都会遇到困难。忘记键入"this.adjective=adjective;",即代码的第3行,因为你会将错误视为一些未定义的对象...尝试上面的代码以获得完美的输出......正确。