javascript - 關(guān)于defineProperty的value
問題描述
> var a = {}> Object.defineProperty(a, 'b', {... value: 110}){}> a{}> a.b110> a.b = 555555> a.b110> var aa = {b: 1}undefined> Object.defineProperty(aa, 'b', {... value: 119}){ b: 119 }> aa.b119> aa.b = 11> aa.b1
為什么aa.b可更改,a.b不能?
問題解答
回答1:屬性描述符有三個屬性分別是 configurable enumerable writable,默認(rèn)值均為 false而使用對象字面量定義的屬性描述符均為 true,可以通過 Object.getOwnPropertyDescriptor(a, ’b’) 及 Object.getOwnPropertyDescriptor(aa, ’b’) 來獲取兩個屬性的描述符。
所以 a.b 不可修改,aa.b 可以修改。
回答2:因為默認(rèn)情況下,通過Object.defineProperty()定義的屬性的屬性值均為false是不可寫的.
a = {}Object.getOwnPropertyDescriptor(a, ’b’)// > undefinedObject.defineProperty(a, 'b', {value: 119})Object.getOwnPropertyDescriptor(a, ’b’)// > Object {value: 119, writable: false, enumerable: false, configurable: false}
而通過對象字面量定義的屬性默認(rèn)是可寫的,調(diào)用`
aa = { b: 1 }Object.getOwnPropertyDescriptor(aa, ’b’)// > Object {value: 1, writable: true, enumerable: true, configurable: true}
所以aa的b屬性是可寫的. 所以O(shè)bject.defineProperty()并不改變屬性的屬性值.所以aa的b的值會改變.
相關(guān)文章:
1. 我在centos容器里安裝docker,也就是在容器里安裝容器,報錯了?2. 在windows下安裝docker Toolbox 啟動Docker Quickstart Terminal 失敗!3. docker-compose中volumes的問題4. docker不顯示端口映射呢?5. golang - 用IDE看docker源碼時的小問題6. docker內(nèi)創(chuàng)建jenkins訪問另一個容器下的服務(wù)器問題7. 關(guān)docker hub上有些鏡像的tag被標(biāo)記““This image has vulnerabilities””8. javascript - 最近用echarts做統(tǒng)計圖時遇到兩個問題!!9. javascript - 連續(xù)點擊觸發(fā)mouseleave事件10. mac里的docker如何命令行開啟呢?

網(wǎng)公網(wǎng)安備