三種建立JavaScript對象的方式

來源:互聯網
上載者:User
JavaScript中對象的建立有以下幾種方式:

(1)使用內建對象(2)使用JSON符號(3)自訂物件建構一、使用內建對象      JavaScript可用的內建對象可分為兩種:      1,JavaScript語言原生對象(語言級對象),如String、Object、Function等;      2,JavaScript運行期的宿主對象(環境宿主級對象),如window、document、body等。      我們所說的使用內建對象,是指通過JavaScript語言原生對象的構造方法,執行個體化出一個新的對象。如:            var str = new String("執行個體初始化String");
      var str1 = "直接賦值的String";
      var func = new Function("x","alert(x)");//樣本初始化func
      var o = new Object();//樣本初始化一個Object二、使用JSON符號      (i)何謂JSON ?            JSON (JavaScript Object Notation)即JavaScript對象命名,是一種輕量級的資料交換格式,易於閱讀和編寫,同時也易於及其解析和產生。它基於《JavaScript Programming Language, Standard ECMA-262 3rd Edition - December 1999》的一個子集。JSON是完全獨立於語言的文字格式設定,因此成為資料交換的理想格式。      JSON作為JavaScript的一個自己,同時ActionScript、C、C#、ColdFusion、E、Java、JavaScript、ML、ObjectiveCAML、Perl、PHP、Python、Rebol、Ruby、Lua等一系列的語言都提供支援,使得JSON成為Ajax開發的首選方案。      JSON有兩種構建方式,一種是採用簡單的“鍵/值對”的集合,在不同的語言中被理解為對象、記錄、結構、字典、雜湊表、有鍵列表,或者關聯陣列等,另一種採用有序的值列表,大部分語言把它理解為數組。      常用的建立方式是第一種,即採用“鍵/值對”集合的形式。在這種形式下,一個對象以“{”(左括弧)開始,“}”(右括弧)結束。每個“名稱”後跟一個“:”(冒號),“ ‘鍵/值’ 對”之間使用“,”(逗號)分隔。      JSON具有以下特點:(1)簡單格式化的資料交換;(2)易於人們的讀寫習慣;(3)易於機器的分析和運行。            在JavaScript中,JSON被理解為對象。通過字串形式的JSON,資料可以很方便地解析成JavaScript獨享,並進行資料的讀取傳遞。通過JSON,在一定程度上客服了JavaScript對象無法作為參數系列化傳遞的問題。      1,簡單的JSON      {name:"劉德華",age:"25",sex:"男"}      2,JSON值的類型      JSON的值可以是簡單的資料類型,例如數字、浮點、字元等,也可以是數組及對象。例如以數組作為member索引值的JSON:      {member:[{name:"劉德華"},{name:"郭富城"},{name:"張學友"},{name:"黎明"}]}{
      book:[{name:"三國演義"},{name:"西遊記"},{name:"水滸傳"},{name:"紅樓夢"}],
      author:[{name:"羅貫中"},{name:"吳承恩"},{name:"施耐安",{name:"曹雪芹"}}]
}      3,在JavaScript中使用JSON      JSON是JavaScript原生格式,這意味著在JavaScript中處理JSON資料不需要任何特殊的API或者工具包,JavaScript預設將JSON當做一個對象處理。      將對象傳遞給一個變數,例如:      var somebooks = {
            book:[{name:"三國演義"},{name:"西遊記"},{name:"水滸傳"},{name:"紅樓夢"}],
            author:[{name:"羅貫中"},{name:"吳承恩"},{name:"施耐安",{name:"曹雪芹"}}]
      }      JSON的每個“鍵”相當於對象的屬性,例如訪問book中的第一個條目,在JavaScript中,就可以簡單地使用“somebooks.book[0].name”來擷取“三國演義”這個值。      我們不但可以將一個JSON字串轉化為對象,反過來將一個對象“編譯”為一個JSON字串,以方便JavaScript中的對象的傳輸。例如:      var Animals = new Object();
           Animals.name = "dog";
           Animals.sex = "Male";
           Animals.age = "2";            Animals對象無法被序列化傳輸,將Animals對象轉化為JSON字串,也就是“{name:"dog",sex:"Male",age:"2"}”。這樣,把該JSON字串作為HTTP請求的一個參數傳遞,從而達到序列化傳輸Animals對象的目的。      (ii)JSON通過字串形式來表達JavaScript的對象。如:      var myObject = {nickname:"my girlfried",name:"big pig"};      JSON實際上充當了一種在JavaScript對象和字串之間實現相互轉換的協議。由於JSON的“外表”可以看成但村的字串,因此JSON在JavaScript的對象傳輸方面可以起到一定的作用。例如把對象strObject轉換成字串後進行傳輸,在達到目的地後通過eval方法將其還原成對象:      function test (o)
      {
            alert (o.name)
      }

      var strObject = '{nickname:"my girlfriend",name:"big pig"}';
      test (eval("(" + strObject + ")"));      三、自訂物件建構      建立進階物件建構有兩種方式:使用“this”關鍵字構造、使用原型prototype構造。如:      //使用this關鍵字定義構造的內容屬性
      function Girl()
      {
            this.name = "big pig";
            this.age = 20;
            this.standing;
            this.bust;
            this.waist;
            this.hip;
      }      //使用prototype
      function Girl(){}
      Girl.prototype.name = "big pig";
      Girl.prototype.age = 20;
      Girl.prototype.standing;
      Girl.prototype.bust;
      Girl.prototype.waist;
      Girl.prototype.hip;

      alert(new Girl().name);      上例中的兩種定義在本質上沒有區別,都是定義“Girl”對象的屬性資訊。“this”與“prototype”的區別主要在於屬性訪問的順序。如:      function Test()
      {
            this.text = function()
            {
                  alert("defined by this");
            }
      }
      
      Test.prototype.test = function()
      {
            alert("defined by prototype");
      }

      var _o = new Test();
      _o.test();//輸出“defined by this”      當訪問對象的屬性或者方法是,將按照搜尋原型鏈prototype chain的規則進行。首先尋找自身的靜態屬性、方法,繼而尋找構造內容相關的可訪問屬性、方法,最後尋找構造的原型鏈。      “this”與“prototype”定義的另一個不同點是屬性的佔用空間不同。使用“this”關鍵字,樣本初始化時為每個執行個體開闢構造方法所包含的所有屬性、方法所需的空間,而使用“prototype”定義,由於“prototype”實際上是指向父級的一種引用,僅僅是個資料的副本,因此在初始化及儲存上都比“this”節約資源。

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在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.