ES8(四) —— Object.getOwnPropertyDescriptor()

目錄

  • ES8如何獲取Object的描述符
    • 設(shè)置描述符使用defineProperty()
    • 獲取單個(gè)屬性的描述符 —— Object.getOwnPropertyDescriptor()
    • 獲取所有屬性里面的數(shù)據(jù)描述符 —— Object.getOwnPropertyDescriptors()
  • 描述符
    • 描述符參考
  • 可以拷貝getter和setter屬性
  • ES6-ES10學(xué)習(xí)版圖

ES8如何獲取Object的描述符

Object.getOwnPropertyDescriptor()只能獲取對(duì)象屬性的描述符但是不能對(duì)其進(jìn)行修改

設(shè)置描述符使用defineProperty()

  • 第一個(gè)參數(shù)目標(biāo)對(duì)象
  • 第二個(gè)參數(shù)目標(biāo)屬性(可以是Symbol
  • 第三個(gè)參數(shù)是對(duì)描述符進(jìn)行配置觉既,true是開(kāi)啟睹酌,false是關(guān)閉
  • 返回傳遞的目標(biāo)對(duì)象
const data = {
  Portland: '78/50',
  Dublin: '88/52',
  Lima: '58/40'
}

Object.defineProperty(data, 'Lima', {
  enumerable: false, // 不可枚舉
  writable: false // 不可改寫(xiě)
})

// 不可枚舉的對(duì)象不會(huì)在里面
console.log(Object.keys(data))
// ["Portland", "Dublin"]

獲取單個(gè)屬性的描述符 —— Object.getOwnPropertyDescriptor()

獲取對(duì)象屬性的描述符

  • 第一個(gè)參數(shù)目標(biāo)對(duì)象
  • 第二個(gè)參數(shù)目標(biāo)屬性
  • 返回值是對(duì)象及其所有描述符孽糖,找不到屬性返回undefined
//可以看到單個(gè)屬性的描述符
console.log(Object.getOwnPropertyDescriptor(data, 'Lima'))
// {value: "58/40", writable: false, enumerable: false, configurable: true}

獲取所有屬性里面的數(shù)據(jù)描述符 —— Object.getOwnPropertyDescriptors()

只接受一個(gè)參數(shù)觅赊,目標(biāo)對(duì)象淫僻。

// 可以看到所有屬性里面的數(shù)據(jù)描述符
console.log(Object.getOwnPropertyDescriptors(data))
// Portland: {value: "78/50", writable: true, enumerable: true, configurable: true}
// Dublin: {value: "88/52", writable: true, enumerable: true, configurable: true}
// Lima: {value: "58/40", writable: false, enumerable: false, configurable: true}

描述符

關(guān)于數(shù)據(jù)描述符集合與其含義砸烦。

描述符 備注
value [屬性的值]
writable [屬性的值是否可被改變]
enumerable [屬性的值是否可被枚舉]
configurable [描述符本身是否可被修改甚纲,屬性是否可被刪除]
get [獲取該屬性的訪問(wèn)器函數(shù)(getter)库正。如果沒(méi)有訪問(wèn)器曲楚, 該值為undefined。]
set [獲取該屬性的設(shè)置器函數(shù)(setter)褥符。 如果沒(méi)有設(shè)置器龙誊, 該值為undefined]

描述符參考

可以拷貝getter和setter屬性

使用Object.assign無(wú)法對(duì)getter和setter的內(nèi)容進(jìn)行拷貝

const p1 = {
  firstName: 'Lei',
  lastName: 'Wang',
  get fullName () {
    return this.firstName + ' ' + this.lastName
  }
}

const p2 = Object.assign({}, p1)
p2.firstName = 'Xiao'
console.log(p2)
// { firstName: 'Xiao', lastName: 'Wang', fullName: 'Lei Wang' }

// 這里面get的東西沒(méi)有進(jìn)行改變,因?yàn)镺bject.assign只是把fullName當(dāng)成普通變量獲取了

如果要獲取全部的喷楣,那么需要這樣做

const descriptors = Object.getOwnPropertyDescriptors(p1)
console.log(descriptors)
/**  獲取了全部的描述信息趟大,然后再一個(gè)新對(duì)象上定義過(guò)去,這樣才能全部拷貝過(guò)去
{
  firstName: {
    value: 'Lei',
    writable: true,
    enumerable: true,
    configurable: true
  },
  lastName: {
    value: 'Wang',
    writable: true,
    enumerable: true,
    configurable: true
  },
  fullName: {
    get: [Function: get fullName],
    set: undefined,
    enumerable: true,
    configurable: true
  }
}
*/
const p3 = Object.defineProperties({}, descriptors)
p3.firstName = 'Hu'
console.log(p3.fullName) // Hu Wang

ES6-ES10學(xué)習(xí)版圖

image
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末铣焊,一起剝皮案震驚了整個(gè)濱河市逊朽,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌曲伊,老刑警劉巖叽讳,帶你破解...
    沈念sama閱讀 206,311評(píng)論 6 481
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場(chǎng)離奇詭異,居然都是意外死亡岛蚤,警方通過(guò)查閱死者的電腦和手機(jī)邑狸,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,339評(píng)論 2 382
  • 文/潘曉璐 我一進(jìn)店門(mén),熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)灭美,“玉大人推溃,你說(shuō)我怎么就攤上這事〗旄” “怎么了铁坎?”我有些...
    開(kāi)封第一講書(shū)人閱讀 152,671評(píng)論 0 342
  • 文/不壞的土叔 我叫張陵,是天一觀的道長(zhǎng)犁苏。 經(jīng)常有香客問(wèn)我硬萍,道長(zhǎng),這世上最難降的妖魔是什么围详? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 55,252評(píng)論 1 279
  • 正文 為了忘掉前任朴乖,我火速辦了婚禮,結(jié)果婚禮上助赞,老公的妹妹穿的比我還像新娘买羞。我一直安慰自己,他們只是感情好雹食,可當(dāng)我...
    茶點(diǎn)故事閱讀 64,253評(píng)論 5 371
  • 文/花漫 我一把揭開(kāi)白布畜普。 她就那樣靜靜地躺著,像睡著了一般群叶。 火紅的嫁衣襯著肌膚如雪吃挑。 梳的紋絲不亂的頭發(fā)上,一...
    開(kāi)封第一講書(shū)人閱讀 49,031評(píng)論 1 285
  • 那天街立,我揣著相機(jī)與錄音舶衬,去河邊找鬼。 笑死赎离,一個(gè)胖子當(dāng)著我的面吹牛逛犹,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播梁剔,決...
    沈念sama閱讀 38,340評(píng)論 3 399
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼圾浅,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼!你這毒婦竟也來(lái)了憾朴?” 一聲冷哼從身側(cè)響起狸捕,我...
    開(kāi)封第一講書(shū)人閱讀 36,973評(píng)論 0 259
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎众雷,沒(méi)想到半個(gè)月后灸拍,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體做祝,經(jīng)...
    沈念sama閱讀 43,466評(píng)論 1 300
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 35,937評(píng)論 2 323
  • 正文 我和宋清朗相戀三年鸡岗,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了混槐。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 38,039評(píng)論 1 333
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡轩性,死狀恐怖声登,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情揣苏,我是刑警寧澤悯嗓,帶...
    沈念sama閱讀 33,701評(píng)論 4 323
  • 正文 年R本政府宣布,位于F島的核電站卸察,受9級(jí)特大地震影響脯厨,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜坑质,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,254評(píng)論 3 307
  • 文/蒙蒙 一合武、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧涡扼,春花似錦稼跳、人聲如沸。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 30,259評(píng)論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)。三九已至巷波,卻和暖如春萎津,著一層夾襖步出監(jiān)牢的瞬間卸伞,已是汗流浹背抹镊。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 31,485評(píng)論 1 262
  • 我被黑心中介騙來(lái)泰國(guó)打工, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留荤傲,地道東北人垮耳。 一個(gè)月前我還...
    沈念sama閱讀 45,497評(píng)論 2 354
  • 正文 我出身青樓,卻偏偏與公主長(zhǎng)得像遂黍,于是被迫代替她去往敵國(guó)和親终佛。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 42,786評(píng)論 2 345