2010-05-21 101 views
1

javascript如何模拟Json语句的函数全局范围?javascript如何模拟Json语句的函数全局范围?

var testJson= 
    { 
     a1: 1, 
     a2: this.a1+1 
    } 

,其结果应该是:

var testJson= 
{ 
    a1: 1, 
    a2: 2 
} 
+0

你的意思是'无功testJson = {A1:1}; testJson.a2 = testJson.a1 + 1;'?你想要的只能通过函数调用来完成,而不是对象符号,至少不能以你想要的方式去做......除非我完全是误会。 – 2010-05-21 18:47:26

+0

你为什么需要这样做? – Eric 2010-05-21 19:05:17

+0

@Nick Craver:你说的对,我只是想减少代码。 正确的方法是: VAR testJson = { A1 :1, A2:testJson.a1 + 1 } – guaike 2010-05-22 02:09:52

回答

1

你必须要么定义之外testJson一个变量,或使用功能的a2值,就像这样:

var testJson = { 
    a1: 1, 
    a2: function() { 
    return this.a1 + 1; 
    } 
}; 
0

JSON不支持代码执行。 JSON specification只是用于序列化和反序列化传输信息的一种手段。 JSON字符串中不应有可执行的内容。

JSON解析器在遇到JSON字符串中的非文字值时应该失败。

此规则的唯一例外是JSON-P,它在函数调用中封装JSON字符串以绕过跨域机制。

+0

好吧,这不是真的JSON,它只是JavaScript语法。 – Pointy 2010-05-21 18:51:35

0

我不认为这很容易。这可能是可能的,但它可能涉及从对象创建一个函数并返回。这将是一个容易得多:

var testJson= 
{ 
    a1: 1, 
    a2: function(){return this.a1+1} 
} 

,你可以评估使用

testJson.a2(); 

这应该工作的开箱