我知道如何解析 JSON 字符串并将其转换为 JavaScript 对象。您可以JSON.parse()在现代浏览器(和 IE9+)中使用。
JSON.parse()
这很好,但是我怎样才能把那个 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 月更新 :执行此操作的“现代”方式是 via Object.assign,但此功能在 IE 11 或更旧的 Android 浏览器中不可用。
Object.assign
当前的答案包含大量手动或库代码。这不是必需的。
用于JSON.parse('{"a":1}')创建普通对象。
JSON.parse('{"a":1}')
使用其中一种标准化函数来设置原型:
Object.assign(new Foo, { a: 1 })
Object.setPrototypeOf({ a: 1 }, Foo.prototype)