2.4 KiB
id | title | challengeType | forumTopicId | dashedName |
---|---|---|---|---|
587d7db2367417b2b2512b89 | Usare un Mixin per aggiungere un comportamento comune tra oggetti non correlati | 1 | 301331 | use-a-mixin-to-add-common-behavior-between-unrelated-objects |
--description--
Come hai visto, il comportamento è condiviso attraverso l'ereditarietà. Tuttavia, ci sono casi in cui l'ereditarietà non è la soluzione migliore. L'ereditarietà non funziona bene per oggetti non correlati come Bird
e Airplane
. Entrambi possono volare, ma un Bird
non è un tipo di Airplane
e viceversa.
Per gli oggetti non correlati, è meglio utilizzare i mixin. Un mixin permette ad altri oggetti di utilizzare una raccolta di funzioni.
let flyMixin = function(obj) {
obj.fly = function() {
console.log("Flying, wooosh!");
}
};
flyMixin
prende qualsiasi oggetto e gli dà il metodo fly
.
let bird = {
name: "Donald",
numLegs: 2
};
let plane = {
model: "777",
numPassengers: 524
};
flyMixin(bird);
flyMixin(plane);
Qui bird
e plane
sono passati a flyMixin
, che assegna la funzione fly
ad entrambi. Ora bird
e plane
possono entrambi volare:
bird.fly();
plane.fly();
La console visualizzerà la stringa Flying, wooosh!
due volte, una volta per ogni chiamata di .fly()
.
Nota come il mixin permette di riutilizzare lo stesso metodo fly
agli oggetti non correlati bird
e plane
.
--instructions--
Crea un mixin chiamato glideMixin
che definisce un metodo chiamato glide
. Quindi usa il glideMixin
per dare sia a bird
che a boat
la capacità di scivolare.
--hints--
Il tuo codice dovrebbe dichiarare una variabile glideMixin
che sia una funzione.
assert(typeof glideMixin === 'function');
Il tuo codice dovrebbe utilizzare il glideMixin
sull'oggetto bird
per dargli il metodo glide
.
assert(typeof bird.glide === 'function');
Il tuo codice dovrebbe utilizzare il glideMixin
sull'oggetto boat
per dargli il metodo 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);