Я знаю, как разобрать строку JSON и превратить ее в объект JavaScript.
Вы можете использовать JSON.parse()
в современных браузерах (и IE9 +).
Это здорово, но как я могу взять этот объект JavaScript и превратить его в конкретный объект JavaScript (т.е. с определенным прототипом)?
Например, предположим, что у вас есть:
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
Опять же, мне не интересно, как преобразовать строку JSON в общий объект JavaScript. Я хочу знать, как преобразовать строку JSON в объект "Foo". То есть мой объект теперь должен иметь функцию 'test' и свойства 'a' и 'b'.
UPDATE
Проведя некоторое исследование, я подумал об этом ...
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);
Будет ли это работать?
ОБНОВЛЕНИЕ Май, 2017 : «Современный» способ сделать это - Object.assign
, но эта функция недоступна в браузерах Android 11 и более ранних версий.