with 语句可以方便地用来引用某个特定对象中已有的属性,但是不能用来给对象添加属性。要给对象创建新的属性,必须明确地引用该对象。
with(object instance)
{
//代码块
}
有时候,在一个程序代码中,多次需要使用某对象的属性或方法,照以前的写法,都是通过:对象.属性或者对象.方法这样的方式来分别获得该对象的属性和方法,着实有点麻烦,学习了with语句后,可以通过类似如下的方式来实现:
with(objInstance)
{
var str = 属性1;
.....
} 去除了多次写对象名的麻烦。
举例:
代码执行效果如下:
姓名: kobe bryant
年龄:28
性别:boy
with 可以给with的大括号内部的代码提供一个上下文,比如代码
with(obj) {
// 代码
}
当这段代码引用一个变量的时候,先在obj的成员里面找,如果找不到,则认为是外部变量,比如函数的局部变量,全局变量等等。当obj很长的时候,这样写可以省去一些麻烦,比如这样:
obj1.obj2.obj3.obj4.obj5.method1();
obj1.obj2.obj3.obj4.obj5.method2();
obj1.obj2.obj3.obj4.obj5.method3();
obj1.obj2.obj3.obj4.obj5.method4();
我要调用这个嵌套很深的obj5的四个方法,我就得这么写,看起来很麻烦,那么with就可以这么写了
with(obj1.obj2.obj3.obj4.obj5) {
method1();
method2();
method3();
method4();
}
省了点事情。
但是,下面我要说但是了,with是一把双刃剑,尽量别用。或者说,绝对不要用,理由如下
JavaScript的严格模式不支持with。
容易引起歧义。还是上面的例子,如果method4这个函数在obj5中不存在,不用with的话,JS直接崩溃,容易查错,但是用了with,有可能一个外部的名为method4就被调用了,可能引起错误蔓延。
如果有上面的问题的话,object名字很长,可以用下面的方法代替:
var tempObj = obj1.obj2.obj3.obj4.obj5;
temoObj.method1();
temoObj.method2();
temoObj.method3();
temoObj.method4();
当你有一个对象的多个属性或者方法需要操作时,就可以使用with
比如