当前位置:  开发笔记 > 编程语言 > 正文

如何使用JSON重新构建Javascript对象?

如何解决《如何使用JSON重新构建Javascript对象?》经验,为你挑选了1个好方法。

我有一个像这样的对象:

var someObj = Class.create ({
  initialize: function(objName){
      this.objName = objName;
  }
});

我可以用

o = new someObj("objName");

做一个obj.我可以使用Object.toJSON(o)将o更改为JSON字符串,但我希望JSON字符串转换回someObj,因此,我使用eval()将JSON字符串传递给对象,但问题是是,它可以成为一个JS Obj,但"o"的构造函数不是someObj.如何使用"someObj"作为构造函数来评估JSON字符串?



1> 小智..:

JSON字符串不能表示具有成员函数的对象,因此您将从JSON字符串中获取的唯一内容是原始数据.假设toJSON方法导致JSON字符串表示具有类实例的所有非函数成员的对象,您应该能够获取结果对象并附加原型以获取所有函数.例如,使用jQuery的便捷extend功能:

var o = new someObj("objName");
var json = Object.toJSON(o);
var json_obj = eval(json);
$.extend(json_obj, someObj.prototype);
json_obj.someMethodDefinedOnsomeObj()

根据您用来表示JavaScript中的类的框架如何使用原型对象模型,您的milage可能与上面的示例非常相似.此外,使用eval()会创建一个安全漏洞,因此如果您不信任JSON字符串的来源,则应使用不同的反序列化方法.仅供全面报道,以下是我使用原始原型的方法:

function Animal(name){
    this.name = name;
}
Animal.prototype.talk = function(){
    console.log("My name is "+this.name);
}

var a = new Animal("Brendan Eich");
a.talk();

var json = '{name: "Tim Berners-Lee"}'
var b = eval(b);
$.extend(b, Animal.prototype);
b.talk();

在firebug控制台中,这会产生输出:

我叫Brendan Eich

我叫Tim Berners-Lee

推荐阅读
小妖694_807
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有