Je sais comment analyser une chaîne JSON et la transformer en objet JavaScript. Vous pouvez utiliser JSON.parse()
dans les navigateurs modernes (et IE9 +).
C'est génial, mais comment puis-je prendre cet objet JavaScript et le transformer en un objet JavaScript particulier (c'est-à-dire avec un certain prototype)?
Par exemple, supposons que vous ayez:
function Foo()
{
this.a = 3;
this.b = 2;
this.test = function() {return this.a*this.b;};
}
var fooObj = new Foo();
alert(fooObj.test() ); //Prints 6
var fooJSON = JSON.parse({"a":4, "b": 3});
//Something to convert fooJSON into a Foo Object
//....... (this is what I am missing)
alert(fooJSON.test() ); //Prints 12
Encore une fois, je ne me demande pas comment convertir une chaîne JSON en un objet JavaScript générique. Je veux savoir comment convertir une chaîne JSON en un objet "Foo". Autrement dit, mon objet devrait maintenant avoir une fonction «test» et les propriétés «a» et «b».
MISE À JOUR Après avoir fait quelques recherches, j'ai pensé à ceci ...
Object.cast = function cast(rawObj, constructor)
{
var obj = new constructor();
for(var i in rawObj)
obj[i] = rawObj[i];
return obj;
}
var fooJSON = Object.cast({"a":4, "b": 3}, Foo);
Ça marchera?
MISE À JOUR Mai 2017 : La façon «moderne» de faire cela est via Object.assign
, mais cette fonction n'est pas disponible dans IE 11 ou les navigateurs Android plus anciens.