javaScript中with的用法

来源:http://www.cnblogs.com/chzng/archive/2016/03/08/5255108.html
-Advertisement-
Play Games

1 JavaScript中的with語句的作用是為逐級的對象訪問提供命名空間式的速寫方式, 也就是在指定的代碼區域, 直接通過節點名稱調用對象 初次接觸到with用法,是這樣一段代碼: 1 2 3 4 5 6 7 8 9 10 11 12 function validate_email(field,


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

您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 第一次用centOS,感覺好高大上,安裝了差不多一個半小時,學習了挺多命令的 1、 檢查centOS中預設的python版本,一般是python2.6。 命令:python –v 2、 安裝GCC 命令:#yum install gcc gcc-c++ 3、 安裝wget網頁下載工具:為後續下載做準
  • 一開始還以為代碼寫的有問題,點擊事件裡面有比較耗時卡主線程的代碼,逐一刪減代碼發現並不是這麼回事。
  • 近階段一直在查看項目里所使用到的一些技術點,發現了gearman,於是就動手搞了下環境,下麵是來自百度百科關於gearman的介紹: Gearman是一個用來把工作委派給其他機器、分散式的調用更適合做某項工作的機器、併發的做某項工作在多個調用間做負載均衡、或用來在調用其它語言的函數的系統。 可用於...
  • atitit.TokenService token服務模塊的設計 1. Token的歸類1 2. Token的用途2 2.1. 訪問控制2 2.2. 編譯原理術語)編輯2 2.3. 數據處理2 1. Token的歸類 Token, 令牌,代表執行某些操作的權利的對象 訪問令牌(Access toke
  • Atitit.atijson 類庫的新特性設計與實現 v3 q31 1. V1版本---集成了多引擎1 2. V2版本新特性 --bsh腳本化2 3. V3版本新特性---迴圈引用解決使用fastjson2 4. prob目前jsonlib庫的存在的問題,2 4.1. 可能版本衝突,拋出ex2 4.
  • Atitit.跨語言 文件夾與文件的io操作集合 草案 1. Jdk原生的太難用了。。1 2. PS: apache commons-io包,FileUtils有相關的方法,IOUtils一般是拷貝文件。1 3. Java raw3 4. 獲取磁碟分區列表 驅動器列表4 5. ref4 1. Jdk
  • 最近一個項目用到Redis做數據緩存,使用Redis最重要的是寫配置文件,那麼要瞭解它的各個配置參數含義,今天整理了一下,發現有些參數不太明白,特貼出來請大家幫忙看看。 daemonize <yes|no>:是否以後臺daemon方式運行 # yes|no (default:no) pidfile
  • 這篇文章主要介紹了正則表達式表單驗證實例詳解的相關資料,大家可以參考下。首先給大家解釋一些符號相關的意義 * 匹配前面的子表達式零次或多次; ^ 匹配輸入字元串的開始位置;$匹配輸入字元串的結束位置 1. /^$/ 這個是個通用的格式。 2. 裡面輸入需要實現的功能。 \d 匹配一個數字字元,等價於...
一周排行
    -Advertisement-
    Play Games
  • 示例項目結構 在 Visual Studio 中創建一個 WinForms 應用程式後,項目結構如下所示: MyWinFormsApp/ │ ├───Properties/ │ └───Settings.settings │ ├───bin/ │ ├───Debug/ │ └───Release/ ...
  • [STAThread] 特性用於需要與 COM 組件交互的應用程式,尤其是依賴單線程模型(如 Windows Forms 應用程式)的組件。在 STA 模式下,線程擁有自己的消息迴圈,這對於處理用戶界面和某些 COM 組件是必要的。 [STAThread] static void Main(stri ...
  • 在WinForm中使用全局異常捕獲處理 在WinForm應用程式中,全局異常捕獲是確保程式穩定性的關鍵。通過在Program類的Main方法中設置全局異常處理,可以有效地捕獲並處理未預見的異常,從而避免程式崩潰。 註冊全局異常事件 [STAThread] static void Main() { / ...
  • 前言 給大家推薦一款開源的 Winform 控制項庫,可以幫助我們開發更加美觀、漂亮的 WinForm 界面。 項目介紹 SunnyUI.NET 是一個基於 .NET Framework 4.0+、.NET 6、.NET 7 和 .NET 8 的 WinForm 開源控制項庫,同時也提供了工具類庫、擴展 ...
  • 說明 該文章是屬於OverallAuth2.0系列文章,每周更新一篇該系列文章(從0到1完成系統開發)。 該系統文章,我會儘量說的非常詳細,做到不管新手、老手都能看懂。 說明:OverallAuth2.0 是一個簡單、易懂、功能強大的許可權+可視化流程管理系統。 有興趣的朋友,請關註我吧(*^▽^*) ...
  • 一、下載安裝 1.下載git 必須先下載並安裝git,再TortoiseGit下載安裝 git安裝參考教程:https://blog.csdn.net/mukes/article/details/115693833 2.TortoiseGit下載與安裝 TortoiseGit,Git客戶端,32/6 ...
  • 前言 在項目開發過程中,理解數據結構和演算法如同掌握蓋房子的秘訣。演算法不僅能幫助我們編寫高效、優質的代碼,還能解決項目中遇到的各種難題。 給大家推薦一個支持C#的開源免費、新手友好的數據結構與演算法入門教程:Hello演算法。 項目介紹 《Hello Algo》是一本開源免費、新手友好的數據結構與演算法入門 ...
  • 1.生成單個Proto.bat內容 @rem Copyright 2016, Google Inc. @rem All rights reserved. @rem @rem Redistribution and use in source and binary forms, with or with ...
  • 一:背景 1. 講故事 前段時間有位朋友找到我,說他的窗體程式在客戶這邊出現了卡死,讓我幫忙看下怎麼回事?dump也生成了,既然有dump了那就上 windbg 分析吧。 二:WinDbg 分析 1. 為什麼會卡死 窗體程式的卡死,入口門檻很低,後續往下分析就不一定了,不管怎麼說先用 !clrsta ...
  • 前言 人工智慧時代,人臉識別技術已成為安全驗證、身份識別和用戶交互的關鍵工具。 給大家推薦一款.NET 開源提供了強大的人臉識別 API,工具不僅易於集成,還具備高效處理能力。 本文將介紹一款如何利用這些API,為我們的項目添加智能識別的亮點。 項目介紹 GitHub 上擁有 1.2k 星標的 C# ...