js重載


在小項目中對於JavaScript使用,只要寫幾個function就行了。但在大型項目中,尤其是在開發追求 良好的用戶體驗的網站中,如SNS,就會 用到大量的JavaScrpt,有時JavaScript的工作量勝過了C#,這時寫一堆function,就會顯得很亂,雜亂無章,甚至會出現命名沖突,管理和維 護起來都很麻煩。對於這種情況我們就需要使用面向對象的思想來開發JavaScript。那我們就這樣作罷:

        在面向對象語言里重載是很重要的一個特性,而JavaScript這個自稱面向對象的語言竟然沒有直接提供重載的功能。

假如 我這樣定義:                       

  function  getDate(){.....} 
 
function  getDate(date){.....}

 那么后一個方法將覆蓋前一個,雖然不報錯。

        但是我們確實是可以實現重載的,如果你用過jQuery,你就會深有體會,比如$("#btn").val() 是獲取id為"btn"的按鈕的value值,而$("#btn").val("點我")則是給id為"btn"的按鈕賦值。

        那么JavaScript是怎么實現(准確地講應該叫“模擬”)的呢?。
        答案很簡單:arguments
        arguments是JavaScript里的一個內置對象,包含了調用者傳遞的實際參數,但不局限於函數聲明所定義的參數列表,而調用時只它和數組一樣有個length屬性。 
   我們暫且把它當“數組”來理解吧,我們根據該數組的長度以及其元素的類型來選擇不同的實現,從而模擬了重載。   
   具體請看下面的示例:

function  getDate(){
   
if (arguments.length == 0 ){ 
      
var  date = new  Date().toLocaleDateString();
       
return   " 您沒有輸入參數,現在時間: " + date ;
   }

   
if (arguments.length == 1 ){
      
if (arguments[ 0 ].constructor  == Date){
       
return   " 您輸入的參數是Date類型,現在時間是: " + arguments[ 0 ].toDateString();
      }
      
if (arguments[ 0 ].constructor  == String){
       
return   " 您輸入的參數是String類型,現在時間是: " + arguments[ 0 ];
      }
   }

}

於是我們可以這樣調用:

getDate()
getDate(
new  Date())
getDate(
" 星期一 " )

     這樣就實現了JavaScript的重載,不過我們發現這樣的“實現”實在是太勉強了,如果參數多了,就會顯得力不從心,代碼也會很亂,到處是if{...} 。所以我不建議在JavaScript中使用這樣的重載。

 

原文地址:http://www.cnblogs.com/xumingxiang/archive/2010/04/30/1725410.html


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM