一尘不染

将JSON字符串解析为JavaScript中的特定对象原型

javascript

我知道如何解析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年5月 :通过的“现代”方式Object.assign,但是IE
11或更旧的Android浏览器中不提供此功能。


阅读 386

收藏
2020-05-01

共1个答案

一尘不染

当前的答案包含很多手动或库代码。这不是必需的。

  1. 使用JSON.parse('{"a":1}')创建一个普通的对象。

  2. 使用标准化功能之一来设置原型:

    • Object.assign(new Foo, { a: 1 })
    • Object.setPrototypeOf({ a: 1 }, Foo.prototype)
2020-05-01