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