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);
}

2 this 对象 返回“当前”对象。

在不同的地方,this 代表不同的对象。如果在 JavaScript 的“主程序”中(不在任何 function 中,不在任何事件处理程序中)使用 this,它就代表 window 对象;如果在 with 语句块中使用 this,它就代表 with 所指定的对象;如果在事件处理程序中使用 this,它就代表发生事件的对象。

一个常用的 this 用法:

<script>
...
function check(formObj) {
...
}
...
</script> <body ...>
...
<form ...>
...
<input type="text" ... onchange="check(this.form)">
...
</form>
...
</body>

这个用法常用于立刻检测表单输入的有效性。

3 举例

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

JS中特殊句子-with的更多相关文章

  1. JS中特殊句子-for in

    for(var i=0;i<len;i++)这样的用法一般都可以用for in 来替代. 例如: var a = ["a","b","c&quo ...

  2. js 中的算法题,那些经常看到的

    js中遇到的算法题不是很多,可以说基本遇不到.但面试的时候,尤其是一些大公司,总是会出这样那样的算法题,考察一个程序员的逻辑思维能力.如下: 1.回文. 回文是指把相同的词汇或句子,在下文中调换位置或 ...

  3. js中引入js

    第一个js文件(被引入的js文件),文件名one.js,内容如下 function alertInOne(){    alert('in one');} 第二个js文件,文件名two.js,内容如下 ...

  4. 5.0 JS中引用类型介绍

    其实,在前面的"js的六大数据类型"文章中稍微说了一下引用类型.前面我们说到js中有六大数据类型(五种基本数据类型 + 一种引用类型).下面的章节中,我们将详细讲解引用类型. 1. ...

  5. 【repost】JS中的异常处理方法分享

    我们在编写js过程中,难免会遇到一些代码错误问题,需要找出来,有些时候怕因为js问题导致用户体验差,这里给出一些解决方法 js容错语句,就是js出错也不提示错误(防止浏览器右下角有个黄色的三角符号,要 ...

  6. JS中给正则表达式加变量

    前不久同事询问我js里面怎么给正则中添加变量的问题,遂写篇博客记录下.   一.字面量 其实当我们定义一个字符串,一个数组,一个对象等等的时候,我们习惯用字面量来定义,例如: var s = &quo ...

  7. js中几种实用的跨域方法原理详解(转)

    今天研究js跨域问题的时候发现一篇好博,非常详细地讲解了js几种跨域方法的原理,特分享一下. 原博地址:http://www.cnblogs.com/2050/p/3191744.html 下面正文开 ...

  8. 关于js中的this

    关于js中的this this是javascript中一个很特别的关键字,也是一种很复杂的机制,学习this的第一步就是要明白this既不指向函数自身也不指向函数的词法作用域,this实际上是函数被调 ...

  9. 表值函数与JS中split()的联系

    在公司用云平台做开发就是麻烦 ,做了很多功能或者有些收获,都没办法写博客,结果回家了自己要把大脑里面记住的写出来. split()这个函数我们并不陌生,但是当前台有许多字段然后随意勾选后的这些参数传递 ...

随机推荐

  1. 《C++ Primer Plus 6th》读书笔记 - 第十章 对象和类

    1. 过程性编程和面向对象编程 2. 抽象和类 1. 使用类对象的程序都可以直接访问公有部分,但只能通过公有成员函数(或友元函数)来访问对象的私有成员 2. 可以在类声明之外定义成员函数,并使其成为内 ...

  2. Log4j的应用实例(转)

    转自:http://www.cnblogs.com/eflylab/archive/2007/01/12/618080.html 在Log4J使用笔记中没有怎么写实例,那么在这篇中我将Log4j的一个 ...

  3. [问题解决] VNC连接黑屏或者灰屏+命令行

    1.修改配置文件/root/.vnc/xstartup 注:有的系统配置里有 –nolisten tcp 和 –nohttpd ,这两个是阻止Xwindows登陆和HTTP方式VNC登陆的,如果需要图 ...

  4. 在Linux下sqlplus 登录时显示SID 和用户名

    一般显示为: SQL> show user USER 为 "SYS" SQL> 在 $ORACLE_HOME/sqlplus/admin目录下 编辑glogin.sql ...

  5. 银行卡检测中心BCTC

    BCTC是Banking Card Test Center的缩写. 银行卡检测中心(下称中心)经中国人民银行总行批准成立于1998年4月,作为一个独立的第三方专业技术检测机构,其主要职责是按照国际.国 ...

  6. keil MDK编译器警告和错误详解(不定期更新)

    工作后从单片机转成ARM,刚开始用ADS1.2编译器,用了一段时间,因为我接手的项目的老程序正是用ADS编译的,部门也大都在用.在学单片机的时候用的是keil c51编译器,ads和这个编译器在易用性 ...

  7. Delphi 实现任务栏多窗口图标显示

    uses Windows; type TfrmLogin = class(TForm) end; implementation {$R *.dfm} procedure TfrmLogin.FormC ...

  8. react-native学习笔记——简单尝试

    毫无疑问,我是个不善于写博文的人. 毫无疑问,react是个出的框架. 毫无疑问,react-native更是个牛逼的引擎. 我个人对react-native的理解就是js被js引擎编译,去调用本地语 ...

  9. poj--1517

    n从0取到9,一个for循环,n++,n=0,n<=9 n=4,求1/4!+1/3!+1/2!+1/1!+1/0! 需要一个for循环,i=n,i>=0,i-- sum+=factoria ...

  10. RBF network

    1.radial basis function RBF表示某种距离,$\mu_m$为中心点,相当于将点$x$到中心点的某种距离作为特征转换 Output方法可以根据需求任意选取(比如使用SVM,log ...