2.8 KiB
id | title | challengeType | forumTopicId | dashedName |
---|---|---|---|---|
587d7dae367417b2b2512b79 | Estendere i costruttori facendogli ricevere argomenti | 1 | 18235 | extend-constructors-to-receive-arguments |
--description--
I costruttori Bird
e Dog
dell'ultima sfida hanno funzionato bene. Tuttavia, nota che tutti i Birds
che vengono creati con il costruttore Bird
sono automaticamente chiamati Albert, sono di colore blu e hanno due zampe. E se volessi degli uccelli con valori diversi per nome e colore? È possibile cambiare manualmente le proprietà di ogni uccello, ma questo sarebbe molto laborioso:
let swan = new Bird();
swan.name = "Carlos";
swan.color = "white";
Supponi di voler scrivere un programma per tenere traccia di centinaia o addirittura migliaia di uccelli diversi in una voliera. Ci vorrebbe molto tempo per creare tutti gli uccelli e successivamente cambiare le proprietà impostando valori diversi per tutti. Per creare più facilmente diversi oggetti Bird
, puoi progettare il tuo costruttore Bird in modo che accetti dei parametri:
function Bird(name, color) {
this.name = name;
this.color = color;
this.numLegs = 2;
}
Potrai quindi passargli dei valori come argomenti al costruttore Bird
per definire ogni singolo uccello: let cardinal = new Bird("Bruce", "red");
crea una nuova istanza di Bird
con le proprietà name
e color
impostate rispettivamente a Bruce
e red
. La proprietà numLegs
è ancora impostata a 2. Il cardinal
ha queste proprietà:
cardinal.name
cardinal.color
cardinal.numLegs
Il costruttore è più flessibile. Ora è possibile definire le proprietà per ogni Bird
al momento della creazione, che è uno dei motivi per cui i costruttori JavaScript sono così utili. Essi raggruppano gli oggetti in base a caratteristiche e comportamenti condivisi e definiscono un progetto che automatizza la loro creazione.
--instructions--
Crea un altro costruttore per Dog
. Questa volta, impostalo in modo che riceva i parametri name
e color
, e abbia la proprietà numLegs
fissata a 4. Quindi crea un nuovo Dog
salvandolo in una variabile terrier
. Passagli due stringhe come argomenti per le proprietà name
e color
.
--hints--
Dog
dovrebbe ricevere un argomento per name
.
assert(new Dog('Clifford').name === 'Clifford');
Dog
dovrebbe ricevere un argomento per color
.
assert(new Dog('Clifford', 'yellow').color === 'yellow');
Dog
dovrebbe avere la proprietà numLegs
impostata a 4.
assert(new Dog('Clifford').numLegs === 4);
terrier
dovrebbe essere creato usando il costruttore Dog
.
assert(terrier instanceof Dog);
--seed--
--seed-contents--
function Dog() {
}
--solutions--
function Dog (name, color) {
this.numLegs = 4;
this.name = name;
this.color = color;
}
const terrier = new Dog();