Sé cómo analizar una cadena JSON y convertirla en un objeto JavaScript. Puede usar JSON.parse()
en navegadores modernos (e IE9 +).
Eso es genial, pero ¿cómo puedo tomar ese Objeto JavaScript y convertirlo en un Objeto JavaScript particular (es decir, con un cierto prototipo)?
Por ejemplo, suponga que tiene:
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
Nuevamente, no me pregunto cómo convertir una cadena JSON en un objeto JavaScript genérico. Quiero saber cómo convertir una cadena JSON en un objeto "Foo". Es decir, mi Objeto ahora debería tener una función 'prueba' y propiedades 'a' y 'b'.
ACTUALIZACIÓN Después de investigar un poco, pensé en esto ...
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);
¿Eso funcionará?
ACTUALIZACIÓN Mayo de 2017 : La forma "moderna" de hacerlo es a través de Object.assign
, pero esta función no está disponible en IE 11 o en navegadores Android anteriores.