语法格式
with(object instance)
{
//代码块
}
有时候,我在一个程序代码中,多次需要使用某对象的属性或方法,照以前的写法,都是通过:对象.属性或者对象.方法这样的方式来分别获得该对象的属性和方法,着实有点麻烦,学习了with语句后,可以通过类似如下的方式来实现:
with(objInstance)
{
var str = 属性1;
.....
}
去除了多次写对象名的麻烦。
ECMAScript 5 里已经不推荐使用 with 语句,一个主要原因是,它会产生莫名的副作用,比如:
var obj = { a: 3 };
with (obj) {
a = 7;
b = 5;
}
这里,我们创建了一个全局变量 b。但一般我们会认为 b 是 obj 对象的属性 – 可惜不是,我们确实创建了一个全局变量。
我们知道全局变量是魔鬼,尤其是莫名产生的全局变量。所以 ECMAScript 5 里引入 'use strict';,解决这类问题。
如果我们在代码前加入 'use strict';:
'use strict';
var obj = { a: 3 };
with (obj) {
b = 5;
}
运行后会报告这样的错误:
SyntaxError: strict mode code may not contain ‘with’ statements
严格模式下不允许使用 with。那就不用吧。
另一个不用 with 的原因是,它会拖慢代码的运行速度。通常,JavaScript 引擎会对要运行的 JavaScript 代码做许多优化,但 with(以及 eval)的引入会变成《海伯利安》这样的变数,导致引擎无法优化代码。
简单说,JavaScript 里不要用 with 了,现在,以后,都没什么必要。