JavaScript淺析2——對象

來源:互聯網
上載者:User

    對象作為JavaScript的進階部分,其中有很多部分較難理解,在經過Anytao的《你必須知道的.NET》章節之-屬性與特性的糾葛恩怨、JQuery In Action等資料的推動下,在此總結對JS中對象的理解:

 

JS對象之內建對象:String、Math、DateTime、Array

      其中String對象,在上一篇JavaScript淺析1——類型中做了介紹。而對於Math對象(其內建了屬性以及靜態方法)、DateTime對象和Array對象,其使用方法雷同於C#,在此不再鼇述;

JS對象之自訂對象:

      作為最為常用的JS自訂對象,其中知識點豐富,值得深究(我認為,呵呵)。通過下面代碼看到對象的建立:

<script type ="text/javascript" language ="javascript" >
       //第一種建立方法——直接加對象屬性,使其具有制定屬性
       var carType=new Object ();
       carType.make='Ford';
       carType.model='Focus';
       carType.year=2009;
       carType.purchased=new Date(2010,1,27);
       //評述:這種對象建立方法不具有直觀性,且很容易由於更改屬性名稱導致錯誤,故不推薦使用
       
       //第二種建立方法——對象字面量
       var carType={
       make:'Ford',
       model:'Focus',
       year:2009,
       purchased:new Date (2010,1,27),
       owner:{
       name:'Yang',
       occupation:'Engineer'
        }
       };
       //評述:這種對象建立方法直觀,同時這種標記法成為JSON(JavaScript Object Notation)
       
       
    </script>

       在JavaScript中並沒有C#中對於對象的參考型別儲存方式,但是就操作來說,依然可以認為是將記憶體對象賦予對應類型的引用(這點雷同於C#中對象)。從上例可以看到:作為對象的屬性,依然可以是以對象!(同C++,C#中對象的複合)。

      講到這裡,我們將要引出本文最重要的議題——函數。函數在JavaScript中是如何儲存的?於C#中一樣嗎?

      如果事先沒有準備,將很難回答,但會隱約感到其中會有不同。是嗎?還是我們先來看看函數的定義方法吧:

<script type ="text/javascript" language ="javascript" >
       //第一種實現函數方法,也是最常用方法
       function ClickButton()
       {
         //函數體實現
       }
       
       //第二種實現函數方法
       var ClickButton=function ()
                  {
                      //函數體實現
                  }
       
    </script>

       函數怎麼會有多種定義方法?有沒有搞錯?答案是:否!

       下面就來揭示函數的本質:函數作為最為特殊的JS的對象(註:有的地方甚至把函數成為:一等公民(對象)),是作為對象來維持的!

       也就是在一般情況下,可以把函數看成對象,對於賦值,即同一般對象賦值——將記憶體對象賦予其對應類型的引用,這也就不難理解上述的函數多種建立方法了,呵呵。

 

附:控制項事件之——“return CheckBoxVoid();”解析:

       學習JavaScript與DOM互動,判斷驗證條件時(此例中假設判定 TextBox非空),在Button的onclick事件中如上述寫道,甚是不解,然在JQuery In Action中無意獲得答案,現分析之:

        先看下面代碼:

<img id="yangImage" src="yang.gif" alt ="an image" class="class1" title="This yang's image" />

      對於此HTML代碼,瀏覽器該如何解析呢?這首先要講到DOM(Document Object Model)模型,它是基於對象的,亦即它將元素抽象為元素對象,其具有屬性的特徵,這不難理解。然而此時的關注點是元素對象的屬性與HTML代碼中是否相同?怎樣處理?

       事實上,在轉化的過程中,並不是名稱嚴格匹配的,會有偏差,觀察:

 

 

     由圖中可見,屬性src被轉換為絕對URL,同時class特性被轉換為屬性className;由此我們可以看到HTML特性轉化為DOM元素屬性時可能有的一些變化。現在通過看如下代碼,看事件是如何定義的:

<script type ="text/javascript" language ="javascript" >
      //假設提交按鈕id為btnSubmit
       document.getElementById ("btnSubmit").onclick=function ()
       {
         CheckBoxVoid ();
       }
       function CheckBoxVoid()
       {
          if(document.getElementById("txtbox").value=="")
            return false;
          return true ;  
       } 
        
    </script>

       由前論述,在對象內,其屬性依然可以是對象。又由於函數是以一種特殊對象維持,故給按鈕元素的onclick事件屬性賦以函數引用;而對於起到同樣效果的HTML代碼(如下示:),該如何解釋呢:

<input type ="submit" id="btnSubmit" onclick ="return CheckBoxVoid();" />

     這就要從瀏覽器解析HTML成DOM文檔樹說起,它將其中的onclick對應成分——"return CheckBoxVoid();"置入其自建的函數內(如下代碼示),而"return"說明返回布爾型。

     

document.getElementById ("btnSubmit").onclick=function ()
       {
        if(document.getElementById("txtbox").value=="")
            return false;
          return true ; 
       }

  

      即可看到在HTML代碼中事件程式的轉化過程,即"return CheckBoxVoid();"可以充分理解了。

 

 

 

 

 

 

 

 

 

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.