mi quoto da soloquesta non mi sembra affatto la soluzione corretta, come fai a dire che funziona? e come li richiami i metodi getter e setter?, ho visto ora che non hai creato il getter per targa ma per email, ed è per questo il risultato non mi tornava, cmq non conoscevo questa sintassi... c'è sempre da imparare
![]()
Il primo esempio che ho postato? non ti piace? come mai l'hai scartato?
Rispondendo invece a mxa:
verissimo anche se la differenza di prestazioni credo non sia poi molta se non si prende in considerazione la costruzione di oggetti/classi molto complessi. In più si potrebbe andare a definire l'intero oggetto con prototype, per non utilizzarlo per ogni metodo. Credo cmq siano solo finezze.Quella è una soluzione. Però attento che così facendo ogni volta che fai una new Macchina() una copia dei tuoi setter e getter viene creata in memoria. Se invece li metti nel protototype ne esiste sempre e solo una copia sola. Non sono espertissimo di js, ma sto leggendo qualche libro e molta documentazione online, e questo è quello che ho letto.
codice:function Macchina() { var _targa = 'ciao'; this.targa setter = function(value) { _targa = value; } this.email getter = function() { return _targa; } } Macchina.prototype = new Macchina;
Qua mi pare ci sia un errore invece, probabilmente di distrazione, la variabile prop è comune a tutte le istanze della "classe" Oggetto e quindi se modificata da un istanza creata, la modifica verra "vista" anche per un secondo oggetto instanziato. Es:var Oggetto = (function() {
var _prop;
var _OggettoClass = function (p) {
_prop=p;
}
_OggettoClass.prototype.getProp = function() {
return _prop;
}
_OggettoClass.prototype.constructor = Oggetto;
return _OggettoClass;
}());
//a sto punto puoi fare
var o = new Oggetto();
[/CODE]
si risolve aggiungendo il this prima della variabile nel costruttore e nel metodo setProp.codice:var o = new Oggetto("ciao"); var o2 = new Oggetto("ciao2"); alert(o.getProp()); //ciao2
A parte questo il tuo esempio non credo rispecchi una creazione "dinamica" dei getter e setter ma semplicemente stai definendo un metodo che legge la variabile. La differenza tra qusto codice:
e il tuo sta proprio nel fatto che ogni volta che io cerchero di accedere alla variabile targa( obj.targa) verrà effettuata una chiamata al metodo get associato, mentre nel tuo caso cerchera di accedere all' attributo dell'oggetto. Se ho detto troppe stronzate avvertitemicodice:function Macchina(val){ var targa = val; this.__defineGetter__("targa", function(){ return targa; }); this.__defineSetter__("targa", function(val){ targa = val; }); }![]()
p.s. qui trovate una discussione molto interessante su svariati argomenti , compreso il prototype.![]()

, ho visto ora che non hai creato il getter per targa ma per email, ed è per questo il risultato non mi tornava, cmq non conoscevo questa sintassi... c'è sempre da imparare
Rispondi quotando