3.5 KiB
id, title, challengeType, forumTopicId, dashedName
id | title | challengeType | forumTopicId | dashedName |
---|---|---|---|---|
587d7dae367417b2b2512b79 | 引数を受け取るためにコンストラクターを拡張する | 1 | 18235 | extend-constructors-to-receive-arguments |
--description--
前回のチャレンジの Bird
と Dog
のコンストラクターは問題なく動作しました。 ただし、Bird
コンストラクターで作成される Birds
はすべて、自動的に Albert という名前になり、青い色で、2 本の脚を持つことになります。 もし名前や色の値が違う鳥が必要になったらどうすればよいでしょうか? それぞれの鳥についてプロパティを手動で変更することは可能ですが、それは大変な作業になります。
let swan = new Bird();
swan.name = "Carlos";
swan.color = "white";
鳥小屋にいる何百、何千種類もの鳥を記録するプログラムを作成しているとしましょう。 すべての鳥を作成して、それぞれの鳥のプロパティを異なる値に変更するのには膨大な時間がかかります。 もっと簡単に種類の異なる Bird
オブジェクトを作成できるように、Bird コンストラクターでパラメーターを受け取るように設計することができます。
function Bird(name, color) {
this.name = name;
this.color = color;
this.numLegs = 2;
}
そして、それぞれの固有の鳥を定義する引数の値を Bird
コンストラクターに渡します。たとえば、let cardinal = new Bird("Bruce", "red");
などとします。このようにすると、name
プロパティと color
プロパティがそれぞれ Bruce
と red
に設定された Bird
の新しいインスタンスが生成されます。 numLegs
プロパティは引き続き 2 に設定されます。 cardinal
は次のプロパティを持ちます。
cardinal.name
cardinal.color
cardinal.numLegs
コンストラクターの柔軟性が高まり、 作成時にそれぞれの Bird
のプロパティを定義できるようになりました。これは JavaScript コンストラクターのとても便利な用法の一つです。 コンストラクターによって、共通の特徴や動作に基づいてオブジェクトをグループ化し、作成を自動化する青写真を定義できます。
--instructions--
別の Dog
コンストラクターを作成してください。 今回は、パラメーター name
と color
を受け取るように記述し、プロパティ numLegs
は 4 に固定してください。 次に、新しい Dog
を作成して変数 terrier
に保存してください。 name
プロパティと color
プロパティの引数として 2 つの文字列を渡してください。
--hints--
Dog
は name
の引数を受け取る必要があります。
assert(new Dog('Clifford').name === 'Clifford');
Dog
は color
の引数を受け取る必要があります。
assert(new Dog('Clifford', 'yellow').color === 'yellow');
Dog
のプロパティ numLegs
を 4 に設定する必要があります。
assert(new Dog('Clifford').numLegs === 4);
Dog
コンストラクターを使用して terrier
を作成する必要があります。
assert(terrier instanceof Dog);
--seed--
--seed-contents--
function Dog() {
}
--solutions--
function Dog (name, color) {
this.numLegs = 4;
this.name = name;
this.color = color;
}
const terrier = new Dog();