有一次,我看到了一个这样的例子:
var a, x, y;
var r = 10;
with (Math) {
a = PI * r * r;
x = r * cos(PI);
y = r * sin(PI / 2);
}
它看起来非常方便,因为这样我就不必输入所有Math.
s。
但是当我看一下MDN时,它会说:
建议不要使用
with
,并且在ECMAScript 5严格模式下禁止使用 。建议的替代方法是将要访问其属性的对象分配给临时变量。
那么可以使用with()
吗?在HTML5
?
答案 0 :(得分:4)
您关联的MDN说Using with is not recommended
...
with
是制作午餐意大利面条代码的绝佳方式。
你可能会喜欢它,但需要调试它的人会诅咒你。
javascript
有一些非常奇怪的运算符,比如逗号运算符(,
)
你能理解下面代码的作用吗?
var a = "a";
var b = "b";
a = [b][b = a,0];
它交换a和b ...你不理解,
所以需要维护你的with
代码。不要使用黑客攻击,黑客在猜字谜游戏中很酷,而不是真正的代码。
答案 1 :(得分:3)
只要您理解,就可以使用JavaScript的任何功能。
例如,使用with
您可以访问对象的现有属性,但无法创建新属性。
观察:
var obj = {a:1,b:2};
with(obj) {
a = 3;
c = 5;
}
// obj is now {a:3,b:2}, and there is a global variable c with the value 5
缩短代码非常有用,例如:
with(elem.parentNode.children[elem.parentNode.children.length-3].lastChild.style) {
backgroundColor = "red";
color = "white";
fontWeight = "bold";
}
因为style
对象的属性已经存在。
我希望这个解释足够清楚。
答案 2 :(得分:2)
道格拉斯·克罗克福德在他的优秀着作“Javascript:The Good Parts”中列出了附录B:不良部分中的“with Statement”。
他说“不幸的是,其结果有时可能无法预测,因此应该避免”。
他继续给出一个例子,其中with内部的赋值将根据对象是否被定义而对不同的变量进行操作。
参见With statement considered harmful(但不如书中的解释详细)。