更改JavaScript范围

问题描述:

是否有任何可能性以自定义方式交换特殊全局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

with只有当传入的对象具有该属性时,它才会被修改。它不会被创建。

http://www.yuiblog.com/blog/2006/04/11/with-statement-considered-harmful/

如果属性存在于给定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