Eu sei como analisar uma string JSON e transformá-lo em um objeto JavaScript. Você pode usar JSON.parse()
em navegadores modernos (e IE9 +).
Isso é ótimo, mas como posso pegar esse objeto JavaScript e transformá-lo em um objeto JavaScript específico (ou seja, com um determinado protótipo)?
Por exemplo, suponha que você tenha:
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
Novamente, não estou pensando em como converter uma string JSON em um objeto JavaScript genérico. Quero saber como converter uma string JSON em um objeto "Foo". Ou seja, meu Objeto agora deve ter uma função 'test' e propriedades 'a' e 'b'.
ATUALIZAÇÃO Depois de fazer algumas pesquisas, pensei nisso ...
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);
Isso vai funcionar?
ATUALIZAÇÃO maio de 2017 : A maneira "moderna" de fazer isso é via Object.assign
, mas essa função não está disponível nos navegadores Android IE 11 ou anteriores.