是否有任何可能性以自定義方式交換特殊全局window
範圍?我只是認爲with
是意味着,但它只是堆疊另一個「查找」範圍。例如。更改JavaScript範圍
test={};
with(test){
a=1;
}
不會創建物業test.a
但window.a
。
那麼window
對象有一個JS特有的特殊質量,我不能用自己的代碼重新創建?
是否有任何可能性以自定義方式交換特殊全局window
範圍?我只是認爲with
是意味着,但它只是堆疊另一個「查找」範圍。例如。更改JavaScript範圍
test={};
with(test){
a=1;
}
不會創建物業test.a
但window.a
。
那麼window
對象有一個JS特有的特殊質量,我不能用自己的代碼重新創建?
與with
只有當傳入的對象具有該屬性時,它纔會被修改。它不會被創建。
http://www.yuiblog.com/blog/2006/04/11/with-statement-considered-harmful/
如果屬性存在於給定with
的對象上,那麼它將被修改,但它永遠不會被創建。這是使用with
的主要「陷阱」,也是它應該避免的主要原因。
是的,不要使用。你只會混淆你的代碼。 – 2011-04-24 01:19:45
是的,我意識到'with'這個缺陷,我只是在我的問題中證明了這一點。現在我正在尋找解決方案。 – dronus 2011-04-24 01:32:59
哦,那麼我的答案應該是「沒有一個」。 – 2011-04-24 01:42:46
從未想過需要這樣做。不需要,但你可以詳細說明爲什麼這是必要的(也許有更好的解決方案)。 – Ben 2011-04-24 01:09:58
我喜歡在自己的命名空間中定義函數和變量,而不使用顯式賦值語言,如test = {'a':1; 'b':function(){... code ...}); – dronus 2011-04-24 01:35:52
不,您不能更改全局對象。 – Reid 2011-04-24 01:36:53