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