gpt4 book ai didi

javascript - 将从 JSON 解析的对象绑定(bind)到类

转载 作者:搜寻专家 更新时间:2023-11-01 04:33:30 25 4
gpt4 key购买 nike

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

当我解压它时,我将得到一个使用原始 Javascript 对象的结构。我希望能够做的是将每个节点绑定(bind)到一个特定的类,以便方法调用在树的每个节点上可用。

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

这是一个说明该方法的简化示例。

我可能会使用 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 为该类定位适当的原型(prototype)。 (感谢 Rob W 建议将 window[tree.nodeType].prototype 作为更好的选择)

现在我可以做 alert(tree.getName());

更好的方法?

我写 StackOverflow 问题并发现足够详细地描述它以避免反对票的行为足以让我自己解决它。这也不异常(exception),但我很想听听任何更优雅的方法来解决这个问题。这个解决方案完成了工作,但我不禁觉得必须有其他方法......

最佳答案

我会摆脱 eval,并使用:

$.extend(tree, window[tree.nodeType].prototype);

如果 MyNode 是一个局部的,但已知的变量,将它添加到一个对象中,以供引用。例如:

var collection = {};
collection['MyNode'] = MyNode;
$.extend(tree, collection[tree.nodeType].prototype);

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

关于javascript - 将从 JSON 解析的对象绑定(bind)到类,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9002103/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com