Javascript 将从JSON解析的对象绑定到类
我想从用JSON表示的web服务中提取一组树状结构的对象 当我解包时,我将得到一个使用普通Javascript对象的结构。我希望能够将每个节点绑定到一个特定的类,以便在树的每个节点上都可以使用方法调用 我的解决方案,使用jQuery.extend() 下面是一个简单的示例,说明了该方法 我可以使用jQuery定义一个简单的类,如下所示Javascript 将从JSON解析的对象绑定到类,javascript,jquery,json,Javascript,Jquery,Json,我想从用JSON表示的web服务中提取一组树状结构的对象 当我解包时,我将得到一个使用普通Javascript对象的结构。我希望能够将每个节点绑定到一个特定的类,以便在树的每个节点上都可以使用方法调用 我的解决方案,使用jQuery.extend() 下面是一个简单的示例,说明了该方法 我可以使用jQuery定义一个简单的类,如下所示 MyNode= function() { this.init(); } $.extend(MyNode.prototype, { init: func
MyNode= function() {
this.init();
}
$.extend(MyNode.prototype, {
init: function() {
// do initialization here
},
getName: function() {
return this.nodeName;
}
});
现在给一个像这样的简单物体
var tree={
nodeName:'frumious',
nodeType:'MyNode'
}
我可以使用
$.extend(tree, eval(tree.nodeType+'.prototype'));
请注意,我希望对象声明类名,因此我使用eval来定位该类的适当原型。(感谢您推荐窗口[tree.nodeType].prototype
作为更好的选择)
现在我可以做一些事情,比如alert(tree.getName())代码>
更好的方法?
我写了一些问题,发现用足够的细节来描述它以避免被否决对我来说已经足够解决它了。这也不例外,但我有兴趣听到任何更优雅的方法来解决这个问题。这个解决方案完成了任务,但我忍不住觉得必须有其他方法…我要摆脱eval
,使用:
$.extend(tree, window[tree.nodeType].prototype);
如果MyNode
是一个局部变量,但已知,请将其添加到对象中以供参考。例如:
var collection = {};
collection['MyNode'] = MyNode;
$.extend(tree, collection[tree.nodeType].prototype);
或者,如果JSON的结构是可靠的,我推荐一个自定义JSON解析器,它还允许您在添加属性之前验证属性。您可以始终实现自己的JSON解析器,在解析文件之前可以使用某种模式提示它。不幸的是,这是非常缓慢的,即使对象数很低:(谢谢,我知道一定有办法避免eval,但我没有找到正确的语法。