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:屬性描述符有三個(gè)屬性分別是 configurable enumerable writable,默認(rèn)值均為 false而使用對(duì)象字面量定義的屬性描述符均為 true,可以通過 Object.getOwnPropertyDescriptor(a, ’b’) 及 Object.getOwnPropertyDescriptor(aa, ’b’) 來獲取兩個(gè)屬性的描述符。
所以 a.b 不可修改,aa.b 可以修改。
回答2:因?yàn)槟J(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}
而通過對(duì)象字面量定義的屬性默認(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的值會(huì)改變.
相關(guān)文章:
1. javascript - 回調(diào)函數(shù)和閉包的關(guān)系2. javascript - 在top.jsp點(diǎn)擊退出按鈕后,right.jsp進(jìn)行頁(yè)面跳轉(zhuǎn),跳轉(zhuǎn)到login.jsp3. android - 哪位大神知道java后臺(tái)的api接口的對(duì)象傳到前端后輸入日期報(bào)錯(cuò),是什么情況?求大神指點(diǎn)4. node.js - koa2 如何獲取參數(shù)?5. javascript - 下面的這段算法代碼求解釋6. css3 - 在sublime text里, 如何讓emmet生成的帶前綴css屬性垂直對(duì)齊?7. mac連接阿里云docker集群,已經(jīng)卡了2天了,求問?8. javascript - js 有什么優(yōu)雅的辦法實(shí)現(xiàn)在同時(shí)打開的兩個(gè)標(biāo)簽頁(yè)間相互通信?9. java - spring-data Jpa 不需要執(zhí)行save 語句,Set字段就可以自動(dòng)執(zhí)行保存的方法?求解10. [前端求職必看]前端開發(fā)面試題與答案精選_擴(kuò)展問題
