我正在做一个项目,需要通过 JSON 将 Perl 对象传递给 javascript。我面临“中间”对象定义方面的问题。
在Perl中,对象由散列表示,程序员不必在“中间”定义任何东西。创建属性后,所有中间对象都会自动创建为哈希引用。例如
$graph{chart}{yAxis}{title} = "Temperature Tracking";
Run Code Online (Sandbox Code Playgroud)
但是,一旦将此对象传递给 Javascript,如果我想在“中间”对象中添加任何新属性,例如:
graph.chart.xAxis.title = "Time Sequence";
Run Code Online (Sandbox Code Playgroud)
我会遇到“未定义的 graph.chart.xAxis”错误。与 Perl 不同,如果我们简单地为其分配属性,Javascript 不会自动创建对象。
目前我必须使用以下解决方案:
if (!graph.chart.xAxis) {
graph.chart.xAxis = {};
graph.chart.xAxis.title = "Time Sequence";
}
Run Code Online (Sandbox Code Playgroud)
不幸的是,在我们的项目中,从 Perl 传递的对象非常动态,并且还有许多 Javascript 可能不知道的其他对象。上述方式使得 JS 代码相当冗长且“难看”。有没有更好的解决方案可以使 Javascript 表现得像 Perl,这意味着我不必手动创建中间对象?
我不确定这是否满足您的要求,但创建丢失对象的简单函数可能如下所示:
function insertNode(obj, node, value) {
var segments = node.split('.');
var key = segments.pop();
var ref = obj;
while (segments.length > 0) {
var segment = segments.shift();
if (typeof ref[segment] != 'object') {
ref[segment] = {};
}
ref = ref[segment];
}
ref[key] = value;
};
var x = {};
insertNode(x, 'foo.bar.baz', 'hello world');
alert(x.foo.bar.baz); // "hello world"
Run Code Online (Sandbox Code Playgroud)
演示: http: //jsfiddle.net/sNywt/1/
| 归档时间: |
|
| 查看次数: |
665 次 |
| 最近记录: |