javascript - 關于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,默認值均為 false而使用對象字面量定義的屬性描述符均為 true,可以通過 Object.getOwnPropertyDescriptor(a, ’b’) 及 Object.getOwnPropertyDescriptor(aa, ’b’) 來獲取兩個屬性的描述符。
所以 a.b 不可修改,aa.b 可以修改。
回答2:因為默認情況下,通過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}
而通過對象字面量定義的屬性默認是可寫的,調用`
aa = { b: 1 }Object.getOwnPropertyDescriptor(aa, ’b’)// > Object {value: 1, writable: true, enumerable: true, configurable: true}
所以aa的b屬性是可寫的. 所以Object.defineProperty()并不改變屬性的屬性值.所以aa的b的值會改變.
相關文章:
1. 微信公眾號在線生成二維碼帶參數怎么搞?2. 微信開放平臺 - android 微信支付后點完成按鈕,后回調打開第三方頁面,屏幕閃動,求解決方法3. PHP單例模式4. javascript - 這種效果是輪播的效果嗎??沒有思路,求解釋。謝謝大家5. css - font-face引入的新字體無法在火狐瀏覽器上顯示?但是谷歌可以?6. css3 - 誰有時間能給翻譯一下,應該都是CCS的樣式屬性的中文名稱,或者有什么網站有CSS屬性的中英對照表也行。7. html5 - html web 打包成android app8. node.js - 利用vue-cli 構建執行到npm run dev 報錯,求解~9. javascript - 微信小程序的分享問題10. css3 - 能否在CSS中定義“對特定字體的文本加粗”?
