setter Javascript / getter
-
19-09-2019 - |
Domanda
var author = {
firstname: 'Martin',
lastname: 'Hansen'
}
function settersGetters(propStr) {
for (var i = 0; i < propStr.length; i++) {
author['_'+ propStr[i]] = null;
author.__defineGetter__(propStr[i],
function() {
return author['_'+ propStr[i]];
});
author.__defineSetter__(propStr[i],
function(val) {
author['_'+ propStr[i]] = val;
});
};
}
Il codice sopra si spera generare setter / getter per le proprietà dotazione (a) una matrice per l'autore dell'oggetto.
Ma quando io chiamo il codice qui sotto Sia nome e cognome è Olsen .. Che cosa sto facendo di sbagliato?
settersGetters(['firstname', 'lastname']);
author.firstname = 'per';
author.lastname = 'olsen';
console.log(author.firstname);
console.log(author.lastname);
Soluzione
La definizione è realizzata in una chiusura, in modo che tutti gli incastonatori utilizzano l'ultimo valore di i.
Con questo, invece:
function setterGetter(property)
{
author['_'+ property] = null;
author.__defineGetter__(property,
function() {
return author['_'+ property];
});
author.__defineSetter__(property,
function(val) {
author['_'+ property] = val;
});
}
function settersGetters(propStr) {
for (var i = 0; i < propStr.length; i++) {
setterGetter(propStr[i]);
};
}
Altri suggerimenti
Ho il sospetto che questo è un problema di chiusura, che diverse persone mi hanno spiegato utile qui .
Provare avvolgendo il riferimento i
all'interno di una funzione, e leggere su chiusure. Nonostante tutto l'aiuto, confesso che ancora non davvero li capisco.
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow