1. 程式人生 > >JavaScript基礎之物件

JavaScript基礎之物件

在真正的工作中感受到了javascript的強大,所以準備自學javascript。基礎的什麼資料型別、表示式、語句等就不寫出來了,想必大家對那個都很熟悉了。現在就開始介紹javascript物件吧。

“物件是javascript中基本資料型別”這個是《javascript權威指南》中給出的定義。在我看來物件和我們平時所說的字典非常相似,但是這個“字典”是可以繼承的。Javascript中的物件時動態的——可以新增屬性也可以刪除屬性。這個和java或者c++的物件有很大區別,當然java中也可能修改物件屬性除非你用特殊的方法。屬性包括名字和值,屬性名可以是任意的字串,但是同一個物件中不允許有相同的屬性名,屬性值可以是任意的javascript值。在進行屬性設定的時候我們可以根據需要把一些屬性設定為可寫、可列舉、可配置等。

屬性特性:

可寫(writable):表明物件是否可以設定;

可列舉(enumerable):表明是否可以根據for/in進行訪問;

可配置(configurable):表明能否修改該屬性;

這些特性之間有相互的依賴關係例如:可配置==false那麼可寫==true也是不能進行設定該屬性的。

物件特性:

物件的原型(prototype)指向另一個物件,本物件的屬性繼承它的原型;

物件的類(Class)是標示物件的標誌;

物件的擴充套件標誌(extensiable flag)指明是否可以為該物件新增新屬性;

建立物件:

物件直接建立:

var empty={};var point={x:1,y:2}; var book={title:"Javascript",auther:{fistname:"David",subname:"Flangan"}};

通過new進行建立:

var obj=new Object(); var arr=new Array(); var date= new Date();

Object.create:

在介紹之前先介紹一下原型,其實最初的原型是Object.prototype大部分的物件都會繼承這個原型。當然對於Array 的物件他們繼承Array.prototype和Object.prototype,這一系列的連線就是原型鏈。object.create()的方法建立一個新物件,其中第一個引數就是物件的原型,第二個可選引數是對屬性一些的設定。var obj=Object.create({x:1,y:2});//obj繼承了x、y屬性

物件屬性的操作:

屬性的查詢:

可以通過(.)或者([ ])運算子獲取屬性的值。var author= book.author;//得到book的author屬性 var name=book["name"];// 獲取book的name屬性。如果物件自身上沒有要查詢的屬性,就在原型鏈上進行查詢,如果原型鏈上也沒有就返回undefined。

屬性的賦值:

假設要給一個物件的屬性x賦值,如果x在物件中存在(不在原型鏈上),那麼這個賦值只是修改屬性的值。如果物件中不存在這個屬性,並且這個物件是可以擴充套件的就給這個物件新增一個新屬性。如果要賦值的屬性在原型鏈上,那麼就建立一個同名屬性覆蓋原型鏈上的。注意:屬性的賦值首先檢查原型鏈,判斷是不是允許賦值。

刪除屬性:

delete運算子可以刪除物件的屬性,但僅僅是斷開屬性和物件的連線,不會操作屬性中的屬性。delete只能刪除自有屬性不能刪除原型鏈上的。var  o={x:1};delete o.x;//刪除物件o的x屬性。

檢測屬性:

in檢測物件自有和繼承的原型鏈上是否包含眼檢測屬性,var o={x:1}; x in o;//true y in o;//false

hasOwnProperty用來檢測屬性是不是自有屬性。

propertyIsEnumerable檢測屬性是不是自有屬性並且是不是列舉的。

isPrototypeOf:檢測物件之間的關係,p.isPrototypeOf(o);//檢測o是不是繼承p

屬性setter和getter:

存取器屬性,如果一個屬性有setter和getter中的一個就不能像一般屬性進行賦值操作。存取器屬性不具有可寫性,只有getter那麼只讀,setter那麼只寫。如果物件o的原型鏈上有屬性x的setter或getter方法,那麼就不能給哦新增x屬性。只能通過Object.defineProperty(o,"x",{value:0,writable:true,enumerable:true,configurable:true});

序列化物件:

指將物件的狀態轉化為字串,也可以將字串還原為物件。JSON.stringify()轉換為字串,JSON.parse()還原為物件。