Ich lerne gerade ein einfaches Javascript und bin nicht sicher, wie ich dieses Problem lösen soll. (Die Grundform stammt von der Code Academy). Die Aufgabe besteht darin, 3 Kaninchenobjekte mit jeweils einem anderen Adjektiv als Attribut zu erstellen. Drucken Sie dann describeMyself() für jedes Kaninchen.

Anstatt mich dreimal zu wiederholen, möchte ich einen Weg finden, das Problem mit einer for-Schleife zu lösen, um es für mich schlanker / herausfordernder zu machen. Folgendes habe ich versucht:

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();
}

Offensichtlich ist das ("rabbit"+i).describeMyself() falsch. Ich möchte, dass die Schleife "rabbit1", "rabbit2" und "rabbit3" erstellt. Was ist hier die richtige Syntax?

0
JVG 6 Dez. 2012 im 14:54

8 Antworten

Beste Antwort

Zuallererst führen die Parameter, die Sie übergeben, zu undefiniert. Wenn Sie Zeichenfolgen übergeben möchten, markieren Sie sie mit Anführungszeichen als solche. Zweitens bedeutet das Erstellen neuer Instanzen in einer for-Schleife, dass Sie sie an einem anderen Ort speichern müssen, beispielsweise in einem Array.

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);

Vergessen Sie zum späteren Nachschlagen nicht, Zeichenfolgen mit einfachen oder doppelten Anführungszeichen für HTML-Zeichenfolgen zu markieren. Das Obige sollte sein:

var rabbit1 = new Rabbit('fluffy');
var rabbit2 = new Rabbit('happy');
var rabbit3 = new Rabbit('sleepy');
3
JVG 6 Dez. 2012 im 12:45

Verwenden Sie ein Array von Variablen und verwenden Sie dann den Index, um auf diese Weise darauf zuzugreifen

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();
}
1
Lucian Enache 6 Dez. 2012 im 13:11

Probieren Sie dies aus, da es völlig einwandfrei funktioniert, um das perfekte Ergebnis zu erzielen. Hier ist der Code:

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();   

Das Problem ist, dass jeder feststeckt und vergisst, "this.adjective=adjective;" einzugeben, dh die 3. Zeile des Codes, aufgrund derer bei einigen undefinierten Objekten ein Fehler auftritt ... Probieren Sie den obigen Code aus, um die perfekte Ausgabe zu erhalten ... es ist richtig.

-1
Eoin 24 Aug. 2015 im 07:16

Manchmal ist es nützlich, das Objekt dazu zu bringen, sich automatisch einem Array hinzuzufügen.

​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();
}

.

0
Stuart 6 Dez. 2012 im 11:06

Sie können nicht direkt auf die Variablen verweisen, aber Sie können sie in ein Array / Objekt einfügen:

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();
}
0
Lloyd 11 Dez. 2012 im 15:24

Da die globalen Variablen des Kaninchens Eigenschaften des window -Objekts sind, können Sie verwenden:

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

Allerdings

Ich würde jedoch empfehlen, die vorgeschlagenen Array-Beispiele zu verwenden, da dies eine schlechte Praxis ist. (Aber schön zu wissen)

1
Cerbrus 6 Dez. 2012 im 11:00

Betrachten Sie dies als eine hackige Antwort, aber vorausgesetzt, Sie würden dies im globalen Kontext tun, könnten Sie die Verwendung von Arrays vermeiden und auf Ihre Variablen in einem Fensterobjekt wie folgt verweisen:

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();
}

Ganz zu schweigen von einem noch hackigeren und bösen Ansatz mit eval (nur als Referenz):

for (i=1; i<=3; i++){
    eval("rabbit"+i+".describeMyself()");
}
1
WTK 6 Dez. 2012 im 11:01

Sie waren nah dran, versuchen Sie Folgendes:

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();
}
0
Constantine 6 Dez. 2012 im 11:16