1、數(shù)據(jù)屬性
數(shù)據(jù)屬性包含一個數(shù)據(jù)值的位置。這個位置可以讀取和寫入值。數(shù)據(jù)屬性有4個描述其行為的特性。
[ [ Configurable ] ] 表示能否通過delete刪除屬性從而重新定義屬性,能否修改屬性的特性,或者能否把屬性修改為訪問屬性。默認為true
[ [ Enumerable] ] 表示能否通過for-in循環(huán)返回屬性。默認為true
[ [ Writable ] ] 表示能否修改屬性的值。默認為true
[ [ Value ] ] 包含這個屬性的屬性值。讀取屬性的時候,從這個位置讀取,寫入屬性的時候,把新值保存在這個位置。默認為undefined
eg:
var p = {}; Object.defineProperty(p, "name", { writable: false, value: 'nihao' })
2、訪問器屬性
訪問器屬性不包含數(shù)據(jù)值,他們包含一對兒getter和setter函數(shù)(不過,這兩個函數(shù)都不是必須的)在讀取訪問器屬性的時候會調用getter函數(shù),這個函數(shù)負責返回有效的值。在寫入訪問器屬性是,會調用setter函數(shù)并傳入新值,這個函數(shù)負責決定如何處理數(shù)據(jù)
[ [ Configurable ] ] 表示能否通過delete刪除屬性從而重新定義屬性,能否修改屬性的特性,或者能否把屬性修改為訪問屬性。默認為true
[ [ Enumerable] ] 表示能否通過for-in循環(huán)返回屬性。默認為true
[ [ Get ] ] 在讀取屬性時調用的函數(shù),默認為undefined
[ [ Set ] ] 在寫入屬性時調用的函數(shù),默認為undefined
eg:
var p = {get: 0}; Object.defineProperty(p, "name", { get: function (){ console.log('get'); return this.get; }, set: function (newVal) { console.log('set'); this.get = newVal; } })
3、讀取屬性的特性
Object.getOwnPropertyDescriptor(屬性所在的對象, 屬性名稱);
返回值是一個對象,訪問屬性configurable 、enumerable、get、set四個屬性,
如果是數(shù)值屬性,返回的對象屬性有configurable 、enumerable、writable、value四個屬性
備注:
Object.defineProperties()函數(shù)可以定義多個屬性
eg:
var p = {get: 0}; Object.defineProperties(p, {"name", { get: function (){ console.log('get'); return this.get; }, set: function (newVal) { console.log('set'); this.get = newVal; } }, "age": { writable: true, value: 11 } })
聲明:本網(wǎng)頁內容旨在傳播知識,若有侵權等問題請及時與本網(wǎng)聯(lián)系,我們將在第一時間刪除處理。TEL:177 7030 7066 E-MAIL:11247931@qq.com