2011-04-24 136 views
2

是否有任何可能性以自定義方式交換特殊全局window範圍?我只是認爲with是意味着,但它只是堆疊另一個「查找」範圍。例如。更改JavaScript範圍

test={}; 
with(test){ 
    a=1; 
} 

不會創建物業test.awindow.a

那麼window對象有一個JS特有的特殊質量,我不能用自己的代碼重新創建?

+0

從未想過需要這樣做。不需要,但你可以詳細說明爲什麼這是必要的(也許有更好的解決方案)。 – Ben 2011-04-24 01:09:58

+0

我喜歡在自己的命名空間中定義函數和變量,而不使用顯式賦值語言,如test = {'a':1; 'b':function(){... code ...}); – dronus 2011-04-24 01:35:52

+0

不,您不能更改全局對象。 – Reid 2011-04-24 01:36:53

回答

2

如果屬性存在於給定with的對象上,那麼它將被修改,但它永遠不會被創建。這是使用with的主要「陷阱」,也是它應該避免的主要原因。

+0

是的,不要使用。你只會混淆你的代碼。 – 2011-04-24 01:19:45

+0

是的,我意識到'with'這個缺陷,我只是在我的問題中證明了這一點。現在我正在尋找解決方案。 – dronus 2011-04-24 01:32:59

+0

哦,那麼我的答案應該是「沒有一個」。 – 2011-04-24 01:42:46