将从JSON解析的对象绑定到类

Pau*_*xon 5 javascript jquery json

我想从用JSON表示的Web服务中提取一组树结构的对象

当我解压缩它时,我将结束使用vanilla Javascript对象的结构.我希望能够做的是将每个节点绑定到一个特定的类,以便方法调用在树的每个节点上都可用.

我的解决方案,使用jQuery .extend()

这是一个简化的例子,说明了这种方法.

我可以使用jQuery .extend()定义一个简单的类,如下所示......

MyNode= function() {
  this.init();
}

$.extend(MyNode.prototype, {
   init: function() {
     // do initialization here
   },

   getName: function() {
     return this.nodeName;
   }
});
Run Code Online (Sandbox Code Playgroud)

现在给出一个像这样的简单对象

var tree={
    nodeName:'frumious',
    nodeType:'MyNode'
}
Run Code Online (Sandbox Code Playgroud)

我可以使对象看起来是所需nodeType的实例

$.extend(tree, eval(tree.nodeType+'.prototype'));
Run Code Online (Sandbox Code Playgroud)

请注意,我希望对象声明类名,所以我使用eval来定位该类的相应原型.(感谢Rob W建议window[tree.nodeType].prototype作为更好的选择)

现在我可以做点什么了 alert(tree.getName());

更好的方法?

我编写StackOverflow问题并找到足够详细描述它的行为,以避免downvote足以让我自己解决它.这也不例外,但我有兴趣听到有关此问题的更优雅方法.这个解决方案完成了工作,但我不禁觉得必须有其他方法......

Rob*_*b W 2

我会摆脱eval并使用:

$.extend(tree, window[tree.nodeType].prototype);
Run Code Online (Sandbox Code Playgroud)

如果MyNode是本地但已知的变量,请将其添加到对象中以供参考。例如:

var collection = {};
collection['MyNode'] = MyNode;
$.extend(tree, collection[tree.nodeType].prototype);
Run Code Online (Sandbox Code Playgroud)

或者,如果 JSON 的结构很可靠,我建议使用自定义 JSON 解析器,它还允许您在添加之前验证属性。