2011-06-29 43 views
0

我想我有一個關閉和執行上下文的問題,雖然我不太確定。Javascript關閉和執行上下文 - 與代碼的問題

讓我解釋什麼,我試圖做的,爲什麼我的方式編碼它,我有:

1)我建立一個javascript供電接口,該接口包含不同的應用程序(我打電話給他們的小工具)。

2)所有的小部件都是可移動/可拖動/可關閉/可調整大小等等。我試圖實現類似於桌面界面的東西,儘管必須說我得到的遠遠小於基於Web的操作系統。但這就是我的目標。

3)所以我需要一種方式讓JS代碼加載這些小部件,而不必知道存在哪些小部件和/或其他任何關於它們的東西。我決定,當界面加載時,它應該調用一個php腳本來查找小部件的名稱。

4)JS代碼具有每個小部件的名稱,它現在通過它們遍歷所有調用另一個php腳本,這個php腳本將反饋加載該特定小部件的代碼以及用於顯示它的html代碼。 JS將元素附加到顯示屏幕上,然後加載小部件的JS代碼。

5)這是一個棘手的部分,實際加載代碼爲每個插件,我這樣做是這樣的:

var func=new Function(ajax.responseText); 
func(); 

,它工作正常,或出現ATLEAST。

6)現在我有一個對象和數組的問題,我認爲它與執行上下文有關。

陣列的例子:

var myArray=new Array('foo', 'bar', 'fooBar', 'barFoo'); 

看起來沒給我,與實際陣列沒問題(除非我輸入錯誤的東西在那裏:)不能沒有我的網豆編輯工作)我試圖運行這是一個單獨的腳本,它工作正常,即;有:導致foo

陣列問題alert(myArray[0]);

我的JS代碼不能做任何有用這個數組,因爲實際調用alert(myArray[0]);將導致foo, bar, fooBar, barFoo ..不知道爲什麼發生這種情況真的,但它真的搞亂一切現在開始。

對象範例:運行時,通過它的自我

var myObject=new Object(); 
myObject.a='foo'; 
myObject.b='bar'; 
myObject.c='fooBar'; 
myObject.d='barFoo'; 

同樣,對象工作正常。

對象問題:

非常類似的問題與數組,調用alert(myObject['a']);實際上會導致[object Object],[object Object],[object Object], [object Object] ...

......所以這是同樣的問題與數組,但它更糟糕有變對象,如果我打電話給alert(myObject.a);(請注意,這次我沒有使用['a']),它只會導致undefined

因此回溯一點點,並進一步解釋,所有的東西都在一起的方式:)

1當JS負載它將調用PHP腳本返回包含3個鍵(「功能」一個JSON編碼對象,'JSscript','其他')。每個鍵都包含另一個javacript文件的源代碼。這些全部使用動態創建的函數加載,如:var func=new Function(ajax.responseText)

2)然後它是這些新的JavaScript代碼調用另一個PHP腳本進一步的方向。

3)Php以JSON響應,JSON在一個動態創建的函數內被評估並存儲在一個新變量中。

4)新變量現在是一個包含3個鍵的對象(html, javascript, anotherObject) html被添加到文檔中,javscript被執行在一個新的函數中,如上所述。

5)問題出現在我上一條語句中執行的JS中存在的對象/數組中。

所以,如果任何人都可以幫我解決這個問題,我會非常滿意,如果您需要進一步的解釋或代碼示例,那麼顯然我會很樂意提供。

感謝,

理查德

+0

你能告訴我們代碼執行嗎? – tiagoboldt

+0

你是否在對象/數組創建後的同一範圍內調用'alert'函數?你使用哪個瀏覽器? –

+1

我看不到這樣的問題,例如http://jsfiddle.net/NHhg4/ – Qtax

回答

0

Ohhhh ..原來這與閉包或其他任何關於JavaScript的事情沒有任何關係,對不起讓你興奮。

這是由一個PHP腳本引起的,甚至沒有處理AJAX請求的PHP腳本,它實際上是讀取JavaScript文件然後JSON文件的腳本。該腳本還具有查找和替換功能,就像一個簡單的模板系統,它會查找'['&']'之間的所有單詞,這不幸意味着JavaScript中的任何數組都會被打亂。

我用方括號查找和替換,因爲它最初是爲html模板而設計的,當我開始在我的JS代碼中使用系統時,我只是沒有考慮它。

所以爲了澄清,我的PHP腳本會將obj[var].description的JS變成obj.description這是有效的JS,所以沒有標記任何錯誤讓我注意到它。

Ohhhhh。多麼失敗者:)

0

難道你不分析你的Ajax響應文本。

+0

不好,代碼被解析好了,對象被創建。我可以將對象轉換回源代碼:obj.toSource();然後再回到一個對象。我也檢查了.toSource = ajax.responseText,它們是一樣的 – Drahcir