JS with和this的用法

1、with 语句为一个或一组语句指定默认对象。

用法:with (<对象>)<语句>;
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);
}

举例
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" οnsubmit="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获得焦点并且表单不提交。


2、this 对象返回“当前”对象。
 
在不同的地方,this 代表不同的对象。如果在 JavaScript 的“主程序”中(不在任何 function中,不在任何事件处理程序中)使用 this,它就代表 window 对象;如果在 with 语句块中使用 this,它就代表 with所指定的对象;如果在事件处理程序中使用 this,它就代表发生事件的对象。
一个常用的 this 用法:
...
function check(formObj) {
    ...
}
...
...
...
<input type="text" ...οnchange="check(this.form)">
...
...
这个用法常用于立刻检测表单输入的有效性。
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值