语法:
with(object){
statements
}
为一组语句创建缺省的对象。在这一组语句中,任何不指定对象的属性引用都将被认为是缺省对象的。
参数:
object 为语句指定要使用的缺省对象。
statements 任意语句块。
示例
下面的语句指定了 Math 对象作为缺省对象。在 with 语句里引用的 PI 属性、cos 和 sin 方法就没有指定对象,JavaScript 会假定这些引用都是针对 Math 对象的。
var a, x, y
var r=10
with (Math) {
a = PI * r * r
x = r * cos(PI)
y = r * sin(PI/2)
}
在使用with时要注意的地方:
with内部遇到某一方法或变量时,为了确定其具体内容。首先去在指定对象的属性里去寻找,然后才会找局部变量,最后是全局变量。因此,这里有可能潜伏着危机。例如:
<body>
<ul id="ul"></ul>
<script type="text/javascript" src="app/youtube/script/jquery.min.js"></script>
<script type="text/javascript">
var config = [
{name:"music",text:"Music"},
{name:"shows",text:"Shows"},
{name:"movies",text:"Movies"}
];
for(arrayIndex in config){
var index = parseInt(arrayIndex);
var item = config[index];
var ul = $("#ul");
with(ul){
//通常使用with时,是为了简洁的需要,会有较多的代码,这里只有一个append操作
append($("<li>",{
id:index,
name:item.name,
text:item.text
}));
alert(index);
}
}
</script>
</body>
在上面的代码中,本意是设置每个新添加的li元素的id属性为当前循环的索引,其取值为第一行红字中的index。但是,当脚本在解释with内部的index时,会首先从指定的对象ul(with指定的对象)中寻找index属性。而在jquery对象prototype中恰好有这样一个属性index(Function)。所以,其真正的赋值反而不是我们期望的那样。在alert(index)时,就明显的看到,弹出内容是一个函数体,而不是数字 0,1,2...,因此,在使用with时,需格外谨慎。