javascript--JavaScript 三種創建對象的方法

文章轉載自:http://www.jb51.net/article/20428.htm


javascript中對象的創建有以下幾種方式,使用內置對象,使用JSON符號,自定義對象構造。大家可以參考如下:


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符號

何謂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作爲JavaScript的一個自己,同時ActionScript、C、C#、ColdFusion、E、Java、JavaScript、ML、ObjectiveCAML、Perl、PHP、Python、Rebol、Ruby、Lua等一系列的語言都提供支持,使得JSON成爲Ajax開發的首選方案。


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對象的目的。


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 (<strong>eval</strong>("(" + 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”節約資源。 



發佈了55 篇原創文章 · 獲贊 3 · 訪問量 8萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章