2010-05-21 35 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(); 

這應該工作的開箱