Files
freeCodeCamp/curriculum/challenges/italian/02-javascript-algorithms-and-data-structures/object-oriented-programming/use-closure-to-protect-properties-within-an-object-from-being-modified-externally.md

82 lines
2.6 KiB
Markdown
Raw Permalink Normal View History

---
id: 587d7db2367417b2b2512b8a
title: >-
Usare le closure per proteggere da modifiche esterne le proprietà di un oggetto
challengeType: 1
forumTopicId: 18234
dashedName: >-
use-closure-to-protect-properties-within-an-object-from-being-modified-externally
---
# --description--
Nella sfida precedente, `bird` aveva una proprietà pubblica `name`. È considerata pubblica perché può essere consultata e modificata dal di fuori della definizione di `bird`.
```js
bird.name = "Duffy";
```
Pertanto, qualsiasi parte del tuo codice può facilmente cambiare il nome di `bird` impostandolo a qualsiasi valore. Pensa a cosa succederebbe se cise come password e conti bancari fossero facilmente modificabili da qualsiasi parte del tuo codice. Questo potrebbe causare un sacco di problemi.
Il modo più semplice per rendere privata questa proprietà pubblica è quello di creare una variabile all'interno della funzione costruttore. Questo fa in modo che il campo di applicazione di questa variabile sia solo quello interno alla funzione costruttore, e non la rende più disponibile a livello globale. In questo modo, la variabile può essere consultata e modificata solo da metodi che siano anch'essi all'interno della funzione costruttore.
```js
function Bird() {
let hatchedEgg = 10;
this.getHatchedEggCount = function() {
return hatchedEgg;
};
}
let ducky = new Bird();
ducky.getHatchedEggCount();
```
`getHatchedEggCount` è un metodo privilegiato, perché ha accesso alla variabile privata `hatchedEgg`. Questo è possibile perché `hatchedEgg` è dichiarato nello stesso contesto di `getHatchedEggCount`. In JavaScript, una funzione ha sempre accesso al contesto in cui è stata creata. Questa si chiama `closure` (chiusura).
# --instructions--
Cambia il modo in cui `weight` è dichiarata nella funzione `Bird` in modo che diventi una variabile privata. Quindi, crea un metodo `getWeight` che restituisca il valore di `weight` 15.
# --hints--
La proprietà `weight` dovrebbe essere una variabile privata e dovrebbe avere il valore di `15`.
```js
assert(code.match(/(var|let|const)\s+weight\s*\=\s*15\;?/g));
```
Il tuo codice dovrebbe creare un metodo in `Bird` chiamato `getWeight` che restituisca il valore della variabile privata `weight`.
```js
assert(new Bird().getWeight() === 15);
```
La funzione `getWeight` dovrebbe restituire la variabile privata `weight`.
```js
assert(code.match(/((return\s+)|(\(\s*\)\s*\=\>\s*))weight\;?/g));
```
# --seed--
## --seed-contents--
```js
function Bird() {
this.weight = 15;
}
```
# --solutions--
```js
function Bird() {
let weight = 15;
this.getWeight = () => weight;
}
```