我想从使用JSON
表示的Web服务中提取树结构对象集当我打开它时,我将结束使用vanilla Javascript对象的结构。我希望能够做的是将每个节点绑定到一个特定的类,以便方法调用在树的每个节点上都可用。
这是一个简化的例子,说明了这种方法。
我可以使用jQuery .extend()定义一个简单的类,如下所示......
MyNode= function() {
this.init();
}
$.extend(MyNode.prototype, {
init: function() {
// do initialization here
},
getName: function() {
return this.nodeName;
}
});
现在给出一个像这样的简单对象
var tree={
nodeName:'frumious',
nodeType:'MyNode'
}
我可以使对象看起来是带有
的所需nodeType的实例$.extend(tree, eval(tree.nodeType+'.prototype'));
请注意,我希望对象声明类名,因此我使用eval来定位该类的相应原型。 (感谢Rob W建议将window[tree.nodeType].prototype
作为更好的选择)
现在我可以做alert(tree.getName());
我编写StackOverflow问题并找到足够详细描述它的行为,以避免downvote足以让我自己解决它。这也不例外,但我有兴趣听到有关此问题的更优雅方法。这个解决方案完成了工作,但我不禁觉得必须有其他方法......
答案 0 :(得分:2)
我将摆脱eval
,并使用:
$.extend(tree, window[tree.nodeType].prototype);
如果MyNode
是本地但已知的变量,请将其添加到对象中以供参考。例如:
var collection = {};
collection['MyNode'] = MyNode;
$.extend(tree, collection[tree.nodeType].prototype);
或者,如果JSON的结构是可靠的,我建议使用自定义JSON解析器,它还允许您在添加之前验证属性。