Files
freeCodeCamp/curriculum/challenges/ukrainian/02-javascript-algorithms-and-data-structures/object-oriented-programming/use-a-mixin-to-add-common-behavior-between-unrelated-objects.md

3.2 KiB
Raw Blame History

id, title, challengeType, forumTopicId, dashedName
id title challengeType forumTopicId dashedName
587d7db2367417b2b2512b89 Використайте Mixin для встановлення спільної поведінки між непов'язаними об'єктами 1 301331 use-a-mixin-to-add-common-behavior-between-unrelated-objects

--description--

Як ви помітили, поведінка розділюється внаслідок успадкування. Однак є випадки, коли успадкування не є найкращим рішенням. Успадкування не працює у випадку зі непов'язаними об'єктами, наприклад, як Bird й Airplane. Вони обидві здатні літати, але Bird не належить до типу Airplane і навпаки.

Для непов'язаних об'єктів краще використовувати mixins. Завдяки mixin об'єкти здатні використовувати набір функцій.

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! двічі для кожного .fly() виклику.

Зверніть увагу, що fly метод може бути використано повторно непов'язаними об'єктами bird й plane.

--instructions--

Створіть mixin під назвою glideMixin, що визначає метод під назвою glide. Після цього використайте glideMixin, щоб водночас надати bird й boat можливість поступового переходу.

--hints--

Ваш код має задати змінну glideMixin як функцію.

assert(typeof glideMixin === 'function');

Завдяки використаному у вашому коді glideMixin в об'єкті bird, ви можете завдати метод glide.

assert(typeof bird.glide === 'function');

Ваш код повинен містить в собі glideMixin в об'єкті boat для завдання методу 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);