Я знаю, как разбирать строку 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
, но эта функция недоступна в браузерах IE 11 или старше.