3.0 KiB
id, title, challengeType, forumTopicId, dashedName
id | title | challengeType | forumTopicId | dashedName |
---|---|---|---|---|
587d7db2367417b2b2512b89 | ミックスインを使用して互いに関連性のないオブジェクト間に共通の動作を追加する | 1 | 301331 | use-a-mixin-to-add-common-behavior-between-unrelated-objects |
--description--
ここまで見てきたように、動作は継承を通じて共有されます。 しかし、継承が最善の解決策とはならない場合もあります。 たとえば Bird
と Airplane
のような、互いに関連性のないオブジェクトの場合、継承はうまく機能しません。 どちらも飛ぶことができますが、Bird
は Airplane
の一種ではなく、逆もまた同様です。
関連性のないオブジェクトどうしの場合は、ミックスインを使用する方が適切です。 ミックスインを使用すると、他のオブジェクトで関数のコレクションを使用できるようになります。
let flyMixin = function(obj) {
obj.fly = function() {
console.log("Flying, wooosh!");
}
};
flyMixin
は、任意のオブジェクトを受け取り、fly
メソッドを与えます。
let bird = {
name: "Donald",
numLegs: 2
};
let plane = {
model: "777",
numPassengers: 524
};
flyMixin(bird);
flyMixin(plane);
ここで bird
と plane
を flyMixin
に渡します。すると、それぞれのオブジェクトに fly
関数が割り当てられ、 bird
と plane
の両方が飛べるようになります。
bird.fly();
plane.fly();
コンソールには、文字列 Flying, wooosh!
が 2 回、.fly()
の呼び出しごとに 1 回ずつ表示されます。
このようにミックスインによって、互いに無関係のオブジェクト bird
と plane
で同じ fly
メソッドを再利用できるようになります。
--instructions--
glide
という名前のメソッドを定義する glideMixin
という名前のミックスインを作成してください。 次に、glideMixin
を使用して、bird
と boat
の両方に glide の能力を与えてください。
--hints--
関数である glideMixin
変数を宣言する必要があります。
assert(typeof glideMixin === 'function');
コードの bird
オブジェクトで glideMixin
を使用して、 glide
メソッドを与える必要があります。
assert(typeof bird.glide === 'function');
コードの boat
オブジェクトで glideMixin
を使用して、glide
メソッドを与える必要があります。
assert(typeof boat.glide === 'function');
--seed--
--seed-contents--
let bird = {
name: "Donald",
numLegs: 2
};
let boat = {
name: "Warrior",
type: "race-boat"
};
// Only change code below this line
--solutions--
let bird = {
name: "Donald",
numLegs: 2
};
let boat = {
name: "Warrior",
type: "race-boat"
};
function glideMixin (obj) {
obj.glide = () => 'Gliding!';
}
glideMixin(bird);
glideMixin(boat);