js中with的用法

原创 yanliping 随笔 js随笔 175阅读 2017-11-07 11:04:14 举报

with语句用于设置代码在特定对象中的作用域。
它的语法:
with(expression)statement
例如:
var sMessage = "hello";
with(sMessage){
alert(toUpperCase());//输出"HELLO"
}
在这个例子中,with语句用于字符串,所以在调用toUpperCase()方法时,浏览器将检查该方法是否是本地的函数。如果不是,它将检查伪对象sMessage,看toUpperCase是否为该对象的方法,然后alert输出"HELLO",因为浏览器在解释程序时找到了字符串"hello"的toUpperCase()方法。
在W3School上的一段代码的解释
<html>
<head>
<script type="text/javascript">
function validate_required(field,alerttxt) {
with (field) {
if (value==null||value=="") {
alert(alerttxt);return false;
}else {
return true;
}
}
}
function validate_form(thisform) {
with (thisform) {
if (validate_required(email,"Email must be filled out!")==false) {
email.focus();return false;
}
}
}
</script>
</head>
<body>
<form action="submitpage.htm" onsubmit="return validate_form(this)" method="post">
Email: <input type="text" name="email" size="30">
<input type="submit" value="Submit">
</form>
</body>
</html>
提交表单时,执行validate_form方法,并把表单对象作为参数传入方法中,在validate_form方法中,先判断validate_required方法,由于该方法是公共的,所以可以直接找到,而作为参数的对象email在当前作用域中不存在,所以需要到thisform这个表单对象的作用域中查找name属性是email的表单元素,找到后,执行validate_required方法,在validate_required方法中需要查找value对象,而在validate_required方法的作用域中找不到value属性,因此需要到field中查找(field这时就是name等于email表单元素),field中存在value属性,如果该属性的值为空,给出提示信息并返回false,否则返回true,如果validate_required方法返回true,表单成功提交,如果返回false,email获得焦点并且表单不提交。

说明:
with 语句通常用来缩短特定情形下必须写的代码量。在下面的例子中,请注意 Math 的重复使用:
复制代码 代码如下:
x = Math.cos(3 Math.PI) + Math.sin(Math.LN10) y = Math.tan(14 Math.E)

当使用 with 语句时,代码变得更短且更易读:
复制代码 代码如下:
with (Math){ x = cos(3 PI) + sin (LN10) y = tan(14 E)}

评论 ( 0 )
最新评论
暂无评论

赶紧努力消灭 0 回复