js中with的用法

    技术2025-01-17  11

    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获得焦点并且表单不提交。

    最新回复(0)