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