屬性類型學(xué)習(xí)

1.屬性類型(數(shù)據(jù)屬性和訪問器屬性)

要修改屬性默認(rèn)的特性,必須使用 ECMAScript 5的 Object.defineProperty()方法。

這個方法 接收三個參數(shù):屬性所在的對象、屬性的名字和一個描述符對象。


1.1數(shù)據(jù)屬性

? 數(shù)據(jù)屬性包含一個數(shù)據(jù)值的位置。在這個位置可以讀取和寫入值。數(shù)據(jù)屬性有4個描述其行為的特性

? 1.1.1 [[Configurable]]:表示能否通過delete刪除屬性從而重新定義屬性,能否修改屬性的特性,或者能否把屬性修改為訪問器屬性。

[[Enumberable]]:表示能否通過for-in循環(huán)返回屬性。

[[Writable]]:表示能否修改屬性的值。

[[Value]]:包含這個屬性的數(shù)據(jù)值。


在調(diào)用 Object.defineProperty()方法時,如果不指定,configurable、enumerable 和 writable 特性的默認(rèn)值都是 false。

把 configurable 設(shè)置為 false,表示不能從對象中刪除屬性。如果對這個屬性調(diào)用 delete,則 在非嚴(yán)格模式下什么也不會發(fā)生,而在嚴(yán)格模式下會導(dǎo)致錯誤。而且,一旦把屬性定義為不可配置的, 就不能再把它變回可配置了。此時,再調(diào)用 Object.defineProperty()方法修改除 writable 之外 的特性,都會導(dǎo)致錯誤。


1.2訪問器屬性

訪問器屬性不包含數(shù)據(jù)值;它們包含一對兒 getter和 setter函數(shù)。

在讀取訪問器屬性時,會調(diào)用 getter函數(shù),這個函數(shù)負(fù)責(zé)返回有效的值;在寫入訪問器屬性時,會調(diào)用 setter函數(shù)并傳入新值,這個函數(shù)負(fù)責(zé)決定如何處理數(shù)據(jù)。

1.2.1 [[Configurable]]:表示能否通過 delete 刪除屬性從而重新定義屬性,能否修改屬性的特性,或者能否把屬性修改為數(shù)據(jù)屬性。對于直接在對象上定義的屬性,這個特性的默認(rèn)值為 true。

[[Enumerable]]:表示能否通過 for-in 循環(huán)返回屬性。對于直接在對象上定義的屬性,這 個特性的默認(rèn)值為 true。

[[Get]]:在讀取屬性時調(diào)用的函數(shù)。默認(rèn)值為 undefined。

[[Set]]:在寫入屬性時調(diào)用的函數(shù)。默認(rèn)值為 undefined。

訪問器屬性不能直接定義,必須使用 Object.defineProperty()來定義


2.定義多個屬性

Object.defineProperties()方法可以通過描述符一次定義多個屬性。

這個方法接收兩個對象參數(shù):第一 個對象是要添加和修改其屬性的對象,第二個對象的屬性與第一個對象中要添加或修改的屬性一一對應(yīng)。


3.讀取屬性的特性

Object.getOwnPropertyDescriptor()方法,可以取得給定屬性的描述符。

這個方法接收兩個參數(shù):屬性所在的對象和要讀取其描述符的屬性名稱。返回值是一個對象,如果 是訪問器屬性,這個對象的屬性有 configurable、enumerable、get 和 set;如果是數(shù)據(jù)屬性,這 個對象的屬性有 configurable、enumerable、writable 和 value。

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容