86 lines
2.1 KiB
Markdown
86 lines
2.1 KiB
Markdown
![]() |
---
|
||
|
id: 587d7daf367417b2b2512b7e
|
||
|
title: Comprendere la proprietà Costruttore
|
||
|
challengeType: 1
|
||
|
forumTopicId: 301327
|
||
|
dashedName: understand-the-constructor-property
|
||
|
---
|
||
|
|
||
|
# --description--
|
||
|
|
||
|
C'è una proprietà speciale `constructor` situata nelle istanze oggetto `duck` e `beagle` che sono state create nelle sfide precedenti:
|
||
|
|
||
|
```js
|
||
|
let duck = new Bird();
|
||
|
let beagle = new Dog();
|
||
|
|
||
|
console.log(duck.constructor === Bird);
|
||
|
console.log(beagle.constructor === Dog);
|
||
|
```
|
||
|
|
||
|
Entrambe queste chiamate a `console.log` visualizzeranno `true` nella console.
|
||
|
|
||
|
Nota che la proprietà `constructor` è un riferimento alla funzione costruttore che ha creato l'istanza. Il vantaggio della proprietà `constructor` è che è possibile controllare questa proprietà per scoprire di che tipo di oggetto si tratta. Ecco un esempio di come usarlo:
|
||
|
|
||
|
```js
|
||
|
function joinBirdFraternity(candidate) {
|
||
|
if (candidate.constructor === Bird) {
|
||
|
return true;
|
||
|
} else {
|
||
|
return false;
|
||
|
}
|
||
|
}
|
||
|
```
|
||
|
|
||
|
**Nota:** Poiché la proprietà `constructor` può essere sovrascritta (come vedremo nelle prossime due sfide) normalmente è meglio utilizzare il metodo `instanceof` per controllare il tipo di un oggetto.
|
||
|
|
||
|
# --instructions--
|
||
|
|
||
|
Scrivi una funzione `joinDogFraternity` che richieda un parametro `candidate` e, utilizzando la proprietà `constructor`, restituisca `true` se il candidato è un `Dog`, altrimenti restituisca `false`.
|
||
|
|
||
|
# --hints--
|
||
|
|
||
|
`joinDogFraternity` dovrebbe essere definita come una funzione.
|
||
|
|
||
|
```js
|
||
|
assert(typeof joinDogFraternity === 'function');
|
||
|
```
|
||
|
|
||
|
`joinDogFraternity` dovrebbe restituire `true` se `candidate` è un'istanza di `Dog`.
|
||
|
|
||
|
```js
|
||
|
assert(joinDogFraternity(new Dog('')) === true);
|
||
|
```
|
||
|
|
||
|
`joinDogFraternity` dovrebbe utilizzare la proprietà `constructor`.
|
||
|
|
||
|
```js
|
||
|
assert(/\.constructor/.test(code) && !/instanceof/.test(code));
|
||
|
```
|
||
|
|
||
|
# --seed--
|
||
|
|
||
|
## --seed-contents--
|
||
|
|
||
|
```js
|
||
|
function Dog(name) {
|
||
|
this.name = name;
|
||
|
}
|
||
|
|
||
|
// Only change code below this line
|
||
|
function joinDogFraternity(candidate) {
|
||
|
|
||
|
}
|
||
|
```
|
||
|
|
||
|
# --solutions--
|
||
|
|
||
|
```js
|
||
|
function Dog(name) {
|
||
|
this.name = name;
|
||
|
}
|
||
|
function joinDogFraternity(candidate) {
|
||
|
return candidate.constructor === Dog;
|
||
|
}
|
||
|
```
|