javascript之with

来源:互联网 发布:3m防尘面具 知乎 编辑:程序博客网 时间:2024/06/04 18:26

语法:

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时,需格外谨慎。


原创粉丝点击