Ah non, j'ai compris. En fait le code initial est correct, mais la syntaxe utilisée pour définir un setter est obsolète. Oui, "setter" est effectivement un "mot-clé" (ou plutôt une valeur).
On redéfinit en fait le comportement des initialisations. Au lieu d'attribuer une valeur à une propriété, on fait savoir que l'on veut afficher cette valeur ; et ce, pour chaque attribut de l'objet. Dans ce cas ledit objet est, d'après tes informations complémentaires, celui qui va être sérialisé au format JSON. On intercepte les données en construction en quelque sorte.
Ces données ne seront pas construites.
Tu as ici l'historique des syntaxes utilisées pour définir des setters / getters : http://whereswalden.com/2010/04/16/more-spidermonkey-changes-ancient-esoteric-very-rarely-used-syntax-for-creating-getters-and-setters-is-being-removed/
Un petit exemple au goût du jour pour illustrer :
var foo = {};
Object.defineProperty(foo, 'x', {
set: function(val) {
document.write('foo.x is set to ' + val +
'<br />');
}
});
foo.x = 42;
document.write("foo's value: " + foo.x); // undefined
Par contre le code que t'as posté n'est plus fonctionnel. ( cf « Starting in JavaScript 1.8.1, setters are no longer called when setting properties in object and array initializers. » )