我正在做一些简单的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”。这里的语法是什么?
答案 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行,因为你会将错误视为一些未定义的对象...尝试上面的代码以获得完美的输出......正确。