我想我有一個關閉和執行上下文的問題,雖然我不太確定。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中存在的對象/數組中。
所以,如果任何人都可以幫我解決這個問題,我會非常滿意,如果您需要進一步的解釋或代碼示例,那麼顯然我會很樂意提供。
感謝,
理查德
你能告訴我們代碼執行嗎? – tiagoboldt
你是否在對象/數組創建後的同一範圍內調用'alert'函數?你使用哪個瀏覽器? –
我看不到這樣的問題,例如http://jsfiddle.net/NHhg4/ – Qtax