Javascript學習筆記:對象的屬性類型

在ECMAScript中有兩種屬性:數據屬性和訪問器屬性函數

一、數據屬性spa

configurable:表示可否經過delete刪除屬性從而從新定義屬性;或者可否修改屬性的特性;或者可否把屬性修改成訪問器屬性。code

enumerable:表示可否經過for-in循環返回屬性。對象

writable:表示可否修改屬性的值。blog

value:包含這個屬性的數據值,讀取屬性的時候,從這個位置讀;寫入屬性的時候,把新的值保存在這個位置。ip

二、訪問器屬性get

configurable:表示可否經過delete刪除屬性從而從新定義屬性;或者可否修改屬性的特性;或者可否把屬性修改成數據屬性。it

enumerable:表示可否經過for-in 循環返回屬性。console

get:在讀取屬性的時候調用的函數。table

set:在設置屬性的時候調用的函數。

①對於直接在對象上定義的屬性,configurable、enumerable、writable的默認值爲true:

var person={};
person.name="張三";
console.log(Object.getOwnPeopertyDescriptor(person,'name')) //Object {value: "張三", writable: true, enumerable: true, configurable: true}

②對於經過Object.defineProperty()或者Object.defineProperties()定義的屬性,configurable、enumerable、writable的默認值爲false:

var person={};
Object.defineProperty(person,'name',{value:'張三'});
console.log(Object.getOwnPropertyDescriptor(person,'name'));//Object {value: "張三", writable: false, enumerable: false, configurable: false}

③當configurable設置爲false時,全部的屬性就不能從新設定,也不能刪除了。可是當configurable設置爲false時,writable設置爲true時,value屬性的值是能夠被直接更改的,可是當writable再次設置爲false時,writable屬性就不能從新設置回true了。

var b={};
Object.defineProperty(b,'b',{configurable:false,writable:true});
Object.getOwnPropertyDescriptor(b,'b')//Object {value: undefined, writable: true, enumerable: false, configurable: false}
Object.defineProperty(b,'b',{writable:false})
Object.getOwnPropertyDescriptor(b,'b')//Object {value: undefined, writable: false, enumerable: false, configurable: false}
Object.defineProperty(b,'b',{writable:true})//Uncaught TypeError: Cannot redefine property: b(…)

④訪問器屬性不能直接定義,只能經過Object.defineProperty()來定義。

⑤當訪問器屬性只設置了get屬性,那麼該屬性是隻讀的;反之,當訪問器屬性只設置了set屬性,那麼該屬性是隻寫的。

⑥一次性定義多個屬性,能夠用Object.defineProperties()

var person={};
Object.defineProperties(person,{name:{value:'張三',configurable:true},sex:{value:'男',writable:true}});
Object.getOwnPropertyDescriptor(person,'name')//Object {value: "張三", writable: false, enumerable: false, configurable: true}
Object.getOwnPropertyDescriptor(person,'sex')//Object {value: "男", writable: true, enumerable: false, configurable: false}

 ⑦查看對象對應的屬性的configurable、enumerable、writable的值能夠經過Object.getOwnPropertyDescriptor()方法。

相關文章
相關標籤/搜索