什么是“与”做在JavaScript?
-
22-09-2019 - |
题
我看到其与with
开始JavaScript代码。这是一个有点混乱。它能做什么和它如何正确使用?
with (sObj) return options[selectedIndex].value;
解决方案
它增加了对包含在块中的语句的范围:
return sObj.options[selectedIndex].value;
可以成为:
with (sObj)
return options[selectedIndex].value;
在你的情况下,好好尝试一下做了一大堆......但考虑以下几点:
var a, x, y;
var r = 10;
a = Math.PI * r * r;
x = r * Math.cos(PI);
y = r * Math.sin(PI /2);
变为:
var a, x, y;
var r = 10;
with (Math) {
a = PI * r * r;
x = r * cos(PI);
y = r * sin(PI / 2);
}
...节省了几个按键。 Mozilla的文件确实会更详细一点解释的事情(有优点和使用它的利弊一起)的一个不错的工作:
其他提示
的with
语句是纯语法糖,但它也可能会导致一些讨厌的错误。
请参阅与澄清声明是有害 :
如果您无法读取程序,并有信心,你知道它是什么要做的事情,你不能有信心,这是正确的去上班。出于这个原因,应避免
with
语句。
在与块你没有输入:
sObj.options[selectedIndex].value
但你可以使用:
options[selectedIndex].value
及其等效的
return sObj.options[selectedIndex].value;
With
让您发出在特定对象的上下文的语句块。因此,所有在with
块中的语句的取为括号中的对象的成员。
这可以使代码有时更易读,的但强>它也可导致二义性,因为可变的引用可以是与sObj或全球性的。
我会建议不要使用,因为性能问题,这一点,但上面有哪些方法是:
为对象的 sObj 强>(这里想必选择元件),在这一个(或以下大括号之间)的治疗中引用的所有儿童和属性与其父范围。
您的例子可以被重写为...
return sObj.options[selectedIndex].value;
...作为提供对象的范围with语句将所有相关的声明。在这种情况下,这是很没有意义的,但是,如果你在“sObj”做大量的作业,则可以节省大量的输入。
共虚构示例..
with (sObj)
{
if(options[selectedIndex].value < 10){
options[selectedIndex].value++;
total+ = options[selectedIndex].value;
}
}
不过,话虽如此,它往往是节省打字可以用更好的方式来实现的情况。
它不是函数(如被指示的问题的标题编辑之前),但发言。它可能更有意义,如果码样本被格式化像这样:
with (sObj){
return options[selectedIndex].value;
}
关于它做什么(源)
with语句建立了一组语句的缺省对象。 JavaScript的查找任何不合格的名称的一组语句内确定名称为默认对象的属性。如果不合格的名称相匹配的属性,则该属性在语句中使用;否则,局部或全局变量被使用。
这意味着代码示例中,首先,如果是options
sObj
的特性进行检查。如果是则options
指sObj.options
,否则它会检查其他范围由名称options
使用with
语句的缺点是,它是不可能从什么被访问的代码只是一眼就知道了。还有如本文所示其他更好的替代品