javascript - 關於defineProperty的value
给我你的怀抱
给我你的怀抱 2017-06-26 10:54:03
0
2
649
> var a = {}
> Object.defineProperty(a, "b", {
... value: 110})
{}
> a
{}
> a.b
110
> a.b = 555
555
> a.b
110

> var aa = {b: 1}
undefined
> Object.defineProperty(aa, "b", {
... value: 119})
{ b: 119 }
> aa.b
119
> aa.b = 1
1
> aa.b
1

為什麼aa.b可以更改,a.b不能?

给我你的怀抱
给我你的怀抱

全部回覆(2)
某草草

屬性描述子有三個屬性分別是configurable enumerable writable,預設值皆為false
而使用物件類型的屬性a, 'b')Object.getOwnPropertyDescriptor(aa, 'b') 來取得兩個屬性的描述符。 所以 a.b

不可修改,

aa.b 可以修改。

迷茫

因為預設情況下,透過Object.defineProperty()定義的屬性的屬性值均為false是不可寫的.

a = {}
Object.getOwnPropertyDescriptor(a, 'b')
// > undefined
Object.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}

所以aab屬性是可寫的. 所以Object.defineProperty()不改變屬性的屬性值.所以aab的值會改變。

熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板