questa non mi sembra affatto la soluzione corretta, come fai a dire che funziona? e come li richiami i metodi getter e setter?
mi quoto da solo , 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:

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.
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.


codice:
function Macchina() {
    var _targa = 'ciao';
    this.targa setter = function(value) { _targa = value; }
    this.email getter = function() { return _targa; }
}

Macchina.prototype = new Macchina;


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]
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:

codice:
var o = new Oggetto("ciao");
var o2 = new Oggetto("ciao2");
alert(o.getProp()); //ciao2
si risolve aggiungendo il this prima della variabile nel costruttore e nel metodo setProp.
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:

codice:
function Macchina(val){
    var targa = val;
    
    this.__defineGetter__("targa", function(){
        return targa;
    });
    
    this.__defineSetter__("targa", function(val){
        targa = val;
    });
}
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 avvertitemi

p.s. qui trovate una discussione molto interessante su svariati argomenti , compreso il prototype.