Is the with keyword that bad in javascript?
Possible Duplicate:
Are there legitimate uses for JavaScript's “with” statement?
在"JavaScript the Good Parts"中,
1 2 3 4 5 6 7 8 9 10 | var foo={foof:function(){console.log(this)}} var fuu={fuuf:function(){console.log(this)}} with(foo){ console.log(this); with(fuu){ console.log(this); foof(); fuuf(); } } |
这很方便,但它仍然有一个根本问题,可以让你快速陷入困境。考虑一下:
1 2 3 4 5 6 7 8 9 10 11 | var foo={foof:function(){console.log(this)}} var fuu={fuuf:function(){console.log(this)}} with(foo){ console.log(this); with(fuu){ console.log(this); foof(); fuuf(); } myProp ="blah"; } |
现在当我们分配到
很难说。
如果
更多信息和您问题的实际答案:
JavaScript的"with"语句是否有合法用途?
和这里:
http://www.yuiblog.com/blog/2006/04/11/with-statement-considered-harmful/
我举个例子,john resigs简单(并且非常受欢迎)客户端模板功能。
好的部分是一本改变生活的现象书,但是crockford并不是可以消化的,并且经常会宣称一些真正属于品味的东西(如果陈述的话,就像一行一样)与同样的权威是坏的,他说真正可怕的事情是坏的(就像整个隐含的全局/显式本地事物一样)。
1 2 3 4 | function f(x, o) { with (o) print(x); } |
基本上,x的值在运行时才是模糊的。如果o有一个名为x的属性,则x将是该属性。如果没有,x将是传入的东西。这意味着阅读代码的开发人员可能很难搞清楚x的含义,更重要的是,JS解释器将无法应用某些类型的优化,否则它将能够至。
现在个人而言,我发现它具有完全可读性,并且我永远不会按照上面示例中的名称命名变量,因此我发现可读性和模糊性参数hogwash。至于perf参数,只要我们不是在谈论愚蠢(比如将你的应用程序放在一个带有块的一半),主要是过早优化的论据,你真正在谈论几乎无法估量的浪费时间。现实世界的场景。我认为这是一种高度情境化的语言特性,只有当替代方案要么明显更多,或者可读性较差的代码才能替代时,才能真正使用它。