JavaScript中對象的建立有如下幾種方式: (1)使用內置對象 (2)使用JSON符號 (3)自定義對象構造 1、使用內置對象工具 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();//示例初始化一個Objectthis 2、使用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:"曹雪芹"}}] }prototype 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"};ip JSON實際上充當了一種在JavaScript對象和字符串之間實現相互轉換的協議。因爲JSON的「外表」能夠當作但村的字符串,所以JSON在JavaScript的對象傳輸方面能夠起到必定的做用。例如把對象strObject轉換成字符串後進行傳輸,在達到目的地後經過eval方法將其還原成對象: 代碼以下: function test (o) { alert (o.name) } var strObject = '{nickname:"my girlfriend",name:"big pig"}'; test (eval("(" + strObject + ")"));原型鏈 3、自定義對象構造 建立高級對象構造有兩種方式:使用「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」節約資源。字符串 |