1 JavaScript中的with语句的作用是为逐级的对象访问提供命名空间式的速写方式, 也就是在指定的代码区域, 直接通过节点名称调用对象

初次接触到with用法,是这样一段代码:

1
2
3
4
5
6
7
8
9
10
11
12
function validate_email(field,alerttxt){
    with (field){
        apos=value.indexOf(@)
        dotpos=value.lastIndexOf(.)
        if (apos<1||dotpos-apos<2){
            alert(alerttxt);
            return false;
        }else {
        return true;
        }
    }
}

with的用法总结如下:

with对象能够使我们很方便的使用某个对象的一些属性,而不用每次都去写对象名.属性 的形式,直接使用对象名。就像上面的代码,field是对象,而value是对象的值。若不是有with,我们应该是field.value的形式来使用属性。使用with去除了多次写with对象只能使用属性,而不能改变属性。

这里有个很简单的例子:

传统的写法

1
2
3
4
5
6
7
8
9
10
11
function Lakers(){ 
    this.name = "kobe bryant"; 
    this.age = 28; 
    this.gender = "boy"; 
}
//传统写法
var people=new Lakers();
var str = "姓名:" + people.name + "<br />";
str += "年龄:" + people.age + "<br />";
str += "性别:" + people.gender;
document.write(str);

with写法

1
2
3
4
5
6
7
8
9
10
11
12
13
14
function Lakers(){ 
    this.name = "kobe bryant"; 
    this.age = 28; 
    this.gender = "boy"; 
 
//with写法
var people=new Lakers();
with(people){ 
    var str = "姓名:" + name + "<br />"; 
    str += "年龄:" + age + "<br />"; 
    str += "性别:" + gender; 
    document.write(str); 
}

这样使用,会得到结果:

姓名: kobe bryant

年龄:28

性别:boy

从下例可以看出with语句的简洁明了,不过在代码的世界里是很难找到真正的完美。

1
2
3
4
5
with(document.forms[0]){
    name.value = "lee king";
    address.value = "Peking";
    zipcode.value = "10000";
}

对应的传统写法:

1
2
3
document.forms[0].name.value = "lee king";
document.forms[0].address.value = "Peking";
document.forms[0].zipcode.value = "10000";

但是,js的解释器需要检查with块中的变量是否属于with包含的对象,这将使with语句执行速度大大下降,并且导致js语句很难被优化。为了兼顾速度与代码量可以找到一个比较折衷的方案:

1
2
3
4
var form = document.forms[0];
form.name.value = "lee king";
form.address.value = "Peking";
form.zipcode.value = "10000";

所以在以后的高效代码开发中我们应该尽可能的避免使用with语句。

2 with方式也可以用来进行样式的赋值。

js进行样式的赋值方法大家可以参考JavaScript中用cssText设置css样式

其中一种方法是:cssText方法:

1
2
3
var t=document.getElementById(dd);
 
t.style.cssText=width:200px;height:300px;

还可以

1
2
3
4
with(t.style){
    width='300px';
    height='300px';
}

javaScript中with的用法的更多相关文章

  1. JavaScript中return的用法详解

    JavaScript中return的用法详解 最近,跟身边学前端的朋友了解,有很多人对函数中的this的用法和指向问题比较模糊,这里写一篇博客跟大家一起探讨一下this的用法和指向性问题. 1定义 t ...

  2. JavaScript中this的用法 及 如何改变this的指向

    要懂得JavaScript中this的用法,首先需要知道,JavaScript中的作用域相关知识. var fun = function(){ var flag = 1; console.log(fl ...

  3. javascript中 try catch用法

    javascript中 try catch用法 投稿:hebedich 字体:[增加 减小] 类型:转载 时间:2015-08-16我要评论 JS try catch语句一般在什么情况下使用?是必须使 ...

  4. 从函数调用的角度,探讨JavaScript中this的用法

    js函数调用方式大概可分为:函数调用,构造器调用,call或apply,方法调用四种方式.下面结合一些基础概念和实测代码,从函数调用的角度,探讨JavaScript中this的用法. 1. new对函 ...

  5. JavaScript中this的用法详解

    JavaScript中this的用法详解 最近,跟身边学前端的朋友了解,有很多人对函数中的this的用法和指向问题比较模糊,这里写一篇博客跟大家一起探讨一下this的用法和指向性问题. 1定义 thi ...

  6. 在HTML页面中实时获取新消息的方法 “JavaScript中的setInterval用法”

    JavaScript中的setInterval用法(资料来源:博主---八神吻你   ) setInterval动作的作用是在播放动画的时,每隔一定时间就调用函数,方法或对象.可以使用本动作更新来自数 ...

  7. JavaScript中一些怪异用法的理解

    引言 JavaScript这门语言有些场合的用法还是比较怪异的.这篇文章会尽量将这门语言特有的一些比较特殊的用法收集在一起.就当是平时开发时需要注意的地方吧. 特殊用法收集 1.!!用法 在JavaS ...

  8. JavaScript中Cookie的用法

    Javascript中Cookie主要存储于客户端的计算机中,用于存放已访问的站点信息,Cookie最大约为4k.以下实例主要用于页面在刷新时保存数据,具体的用法如下所示: <html> ...

  9. javascript中的继承用法

    本文实例汇总了javascript关于继承的用法,希望本文所述对大家的javascript程序设计有所帮助.分享给大家供大家参考.具体如下:代码如下: /** * 实现子类继承父类,但不会产生多余的属 ...

随机推荐

  1. error C2589: “(”: “::”右边的非法标记 error C2059: 语法错误 : “::

    1. 错误输出 ./zlibrary/ui/src/win32/w32widgets/W32VBorderBox.cpp(114) : error C2589: “(”: “::”右边的非法标记    ...

  2. C++/C#/java开发支持求解

    本人大一学C语言,大二学VB,大三学VC,毕业后工作前两年用C++,接着两年用C#,最近几个月Android开发用Java. 以下本人总结以下,有些疑惑希望大师帮忙解答. 1. C语言,精简,灵活,适 ...

  3. Python 3. 里filter与generator expression的区别

    # -*- coding: utf-8 -*- """ A test to show the difference between filter and genrator ...

  4. Identity-第二章

    运用Asp.Net Identity 问题 解决方案 清单号 准备用户认证的应用程序 运用Authorize注解属性来限制对动作方法的访问,并定义一个对用户重定向的控制器,以便让用户提供凭据 1–4 ...

  5. Spring Batch Framework– introduction chapter(下)

    Extract,Transform, and load(ETL) Briefly stated, ETL is a process in the database anddata-warehousin ...

  6. ss与 netstat

    ss快的秘诀在于,它利用到了TCP协议栈中tcp_diag.tcp_diag是一个用于分析统计的模块, 可以获得Linux 内核中第一手的信息,这就确保了ss的快捷高效.当然,如果你的系统中没有tcp ...

  7. 数扰结构-visualization

    http://www.cs.usfca.edu/~galles/visualization/Algorithms.html?url_type=39&object_type=webpage&am ...

  8. ODB 短板

    首先是不支持联合主键,而且没有CHECK约束.UNIQUE约束,这是官方都承认的. 虽然提供了延迟加载(lazyload)来改善效率,不过使用起来不方便 查询不灵活,只能在WHERE之后的部分设定查询 ...

  9. 【转】开发者分享如何创造一款优秀的iOS游戏——2013-08-25 17

    http://game.dapps.net/gamedev/experience/889.html 创造出<Temple Run>的夫妻团队在高峰时期每天能够获得"好几万&quo ...

  10. Java NIO Socket 非阻塞通信

    相对于非阻塞通信的复杂性,通常客户端并不需要使用非阻塞通信以提高性能,故这里只有服务端使用非阻塞通信方式实现 客户端: package com.test.client; import java.io. ...