Je lis les réponses et je comprends même le point de vue de certains utilisateurs (que JSON devrait être utilisé uniquement pour les données) et je suis d'accord que c'est correct, je viens de créer un exemple de preuve de concept. Jetez-y un coup d'œil.
// just a regular object
var obj = {
a: "aaa",
b: "bbb",
c: function() {
return this.a;
}
};
console.log( obj.c() ); // prints "aaa"
// isn't it json just because it has a function? ExtJS will treat it like JSON, but jQuery not
var json = "{" +
"\"a\": \"aaa\", " +
"\"b\": \"bbb\", " +
"\"c\": function() {" +
" return this.a;" +
"}" +
"}";
// ok, the "json" above
console.log( json );
//var jsonObj = $.parseJSON( json ); // does not work
//var jsonObj = eval( json ); // does not work too
var jsonObj = Ext.decode( json ); // it works! shortcut for Ext.JSON.decode
console.log( jsonObj.c() ); // prints "aaa"
C'est presque la même chose que ce que nnnnnn a posté, mais je pense que je le posterais aussi, juste pour compléter les réponses. jsFiddle : http://jsfiddle.net/davidbuzatto/rhKAM/
Je pense donc, même en contradiction avec la définition de JSON, que JSON peut (ou devrait) avoir les mêmes caractéristiques qu'un objet créé à l'aide de l'initialisateur d'objet ordinaire sintax, puisque son nom est JavaScript Notation d'objets, pas Notation d'objets "légère". Je sais, je sais, un désérialiseur ne sera pas capable de désérialiser une fonction en fonction du langage cible, mais pourquoi ExtJS supporte ce "comportement" ? Une bonne discussion peut être trouvée ici : Est-il possible de définir des fonctions dans des résultats JSON ?
Juste pour clarifier. Je n'utilise pas (et je n'utiliserai pas non plus) de fonctions dans mes JSON.