0

現在、簡単な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」を作成したい。ここで適切な構文は何ですか?

4

8 に答える 8

3

まず、渡すパラメーターは undefined になります。文字列を渡したい場合は、引用符を使用してそのようにマークします。第 2 に、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');
于 2012-12-06T10:58:34.300 に答える
1

これはハックな答えだと考えてください。ただし、グローバル コンテキストでこれを行う場合は、配列の使用を避け、次のようにウィンドウ オブジェクトで変数を参照できます。

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

eval を使用したさらにハックで邪悪なアプローチは言うまでもありません (参照用に公開しています):

for (i=1; i<=3; i++){
    eval("rabbit"+i+".describeMyself()");
}
于 2012-12-06T11:01:43.850 に答える
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();
}
于 2012-12-06T11:01:46.583 に答える
1

ウサギのグローバル変数はwindowオブジェクトのプロパティであるため、次を使用できます。

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

でも、

ただし、これは一種の悪い習慣なので、提案されている配列の例を使用することをお勧めします。(でも知れてよかった)

于 2012-12-06T11:00:37.877 に答える
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();
}
于 2012-12-06T11:16:52.530 に答える
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();
}
于 2012-12-06T10:57:51.633 に答える
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();
}

</p>

于 2012-12-06T11:06:34.680 に答える
-1

完璧な結果を得るために完全に正常に動作するので、これを試してみてください。コードは次のとおりです。

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 行目をタイプするのを忘れてスタックすること です。これにより、未定義のオブジェクトとしてエラーが発生する可能性があります...上記のコードを試して、完璧な出力を取得してください...正しいです。

于 2015-08-24T06:45:31.067 に答える