> 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不能?
屬性描述子有三個屬性分別是
不可修改,configurable
enumerable
writable
,預設值皆為false
而使用物件類型的屬性a, 'b')
及
Object.getOwnPropertyDescriptor(aa, 'b')來取得兩個屬性的描述符。
所以
a.baa.b
可以修改。
因為預設情況下,透過
Object.defineProperty()
定義的屬性的屬性值均為false
是不可寫的.而透過物件字面量定義的屬性預設是可寫的,呼叫`
所以
aa
的b
屬性是可寫的. 所以Object.defineProperty()
不改變屬性的屬性值.所以aa
的b
的值會改變。