Я знаю, як розібрати струну 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'.
ОНОВЛЕННЯ Після проведення деяких досліджень я подумав про це ...
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 чи старих Android.