Js中的數據屬性和訪問器屬性
在javaScript中,對象的屬性分為兩種類型:數據屬性和訪問器屬性。
一、數據屬性
1.數據屬性:它包含的是一個數據值的位置,在這可以對數據值進行讀寫。
2.數據屬性包含四個特性,分別是:
configurable:表示能否通過delete刪除屬性從而重新定義屬性,能否修改屬性的特性,或能否把屬性修改為訪問器屬性,默認為true
enumerable:表示能否通過for-in循環返回屬性
writable:表示能否修改屬性的值
value:包含該屬性的數據值。默認為undefined
如下面這個例子:創建一個對象person,打印出name屬性的特性的默認值
執行結果:
對幾個特性的測試:
測試結果:
3.修改數據屬性的默認特性
修改屬性屬性的默認特性要用到一個方法:Object.defineProperty()方法,這個方法有三個參數:屬性所在的對象,屬性名,一個描述符對象。
通過這個方法,我們可以來修改一個屬性的這4個特性。
如我們對剛剛上面的penson對象里面的name屬性的特性進行修改:
執行結果:
結果中可以看到,person對象的name屬性中的四個特性的值都相應改變了。同時后面的報錯是對configurable這個特性改為false后的局限的測試。
上面的注釋中是分別對各個屬性修改后的影響的測試。大家可以自己運行下試試效果。
二、訪問器屬性
1.訪問器屬性:這個屬性不包含數據值,包含的是一對get和set方法,在讀寫訪問器屬性時,就是通過這兩個方法來進行操作處理的。
2.訪問器屬性包含的四個特性:
configurable:表示能否通過delete刪除屬性從而重新定義屬性,能否修改屬性的特性,或能否把屬性修改為訪問器屬性,默認為false
enumerable:表示能否通過for-in循環返回屬性,默認為false
Get:在讀取屬性時調用的函數,默認值為undefined
Set:在寫入屬性時調用的函數,默認值為undefined
這里要注意下,訪問器屬性不能直接定義,要通過Object.defineProperty()這個方法來定義。
下面來個例子,創建一個訪問器對象book,接着打印出其year訪問器屬性的特性描述並對其方法進行測試打印:
執行結果:
其他兩個特性configurable,enumerable的測試方式可以參照數據屬性的。不過在這特別說明下,關於configurable這個特性,因為訪問器屬性里面這個
特性默認值為false,如果程序后面需要對該屬性進行delete操作等,那就在定義訪問器屬性時,將這個特性設置為true,不然這個會導致后面一些報錯的問題。