<分区>
我知道 with
被认为是一个“坏的部分”,但我从来不在乎,因为我只是小心地使用它(同上,顺便说一句,在 block 中使用 var
语句)。现在,我了解到 with
已从 EcmaScript 5.0 严格模式中删除。
这是我的用例:我有一个导出大约 20 或 30 个函数的库。我的大部分代码从不使用任何库,但使用的部分很多。
现在,我的代码如下所示:
with (mylib) {
f1(f2(f1(), f3())); // five or 10 more lines like this
}
为了合规,我必须...
a) 将所有函数移动到全局范围(糟糕)。
b) mylib.f1(mylib.f2(mylib.f1(), mylib.f3()));
(冗长)
c) var x = mylib; x.f1(x.f2(x.f1(), x.f3()));
(稍微不那么冗长但意义不大)。
请告诉我现在有更好的解决方案。我想要的是某种方式将对象的内容导出到一定级别的范围(正是 with
的用途)。
编辑:
有些事情我应该说得更清楚。我不希望人们向我解释为什么我不想做我想做的事;我希望人们向我解释如何做我实际上想做的事情。
问题是,出于我无法控制的原因,库的导出都有非常可识别的名称。与其称它们为 f1、f2 等,不如称它们为 Bobs_Library_Function_F1、Bobs_Library_Function_F2 等。
我只是不想要很多看起来像
的代码Bobs_Library.Bobs_Library_Function_F1(Bobs_Library.Bobs_Library_Function_F2(Bobs_Library.Bobs_Library_Function_F1(), Bobs_Library.Bobs_Library_Function_F3()));
(真名并没有那么糟糕,它们实际上非常漂亮,加上前缀就可以了。)
任何认真地不同意这里的人,好吧,我希望你永远不要在应该使用 jQuery.whatever
时使用 $.whatever
因为那会让你看起来像个大伪君子。
我正在考虑使用 $$.f1
...
进一步编辑
说真的,感谢您提供的所有信息,但我并不是要就 (a)、(b) 或 (c) 是否最佳进行投票。我正在寻找能够很好地完成 with
功能的选项 (d)。
我是否至少从严格模式中获得了 block 作用域?