Files
freeCodeCamp/curriculum/challenges/japanese/02-javascript-algorithms-and-data-structures/object-oriented-programming/use-a-mixin-to-add-common-behavior-between-unrelated-objects.md
2022-01-20 20:30:18 +01:00

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

ここまで見てきたように、動作は継承を通じて共有されます。 しかし、継承が最善の解決策とはならない場合もあります。 たとえば BirdAirplane のような、互いに関連性のないオブジェクトの場合、継承はうまく機能しません。 どちらも飛ぶことができますが、BirdAirplane の一種ではなく、逆もまた同様です。

関連性のないオブジェクトどうしの場合は、ミックスインを使用する方が適切です。 ミックスインを使用すると、他のオブジェクトで関数のコレクションを使用できるようになります。

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

ここで birdplaneflyMixin に渡します。すると、それぞれのオブジェクトに fly 関数が割り当てられ、 birdplane の両方が飛べるようになります。

bird.fly();
plane.fly();

コンソールには、文字列 Flying, wooosh! が 2 回、.fly() の呼び出しごとに 1 回ずつ表示されます。

このようにミックスインによって、互いに無関係のオブジェクト birdplane で同じ fly メソッドを再利用できるようになります。

--instructions--

glide という名前のメソッドを定義する glideMixin という名前のミックスインを作成してください。 次に、glideMixin を使用して、birdboat の両方に 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);