> 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不能?
Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号
属性描述符有三个属性分别是
configurable
enumerable
writable
,默认值均为false
而使用对象字面量定义的属性描述符均为
true
,可以通过Object.getOwnPropertyDescriptor(a, 'b')
及Object.getOwnPropertyDescriptor(aa, 'b')
来获取两个属性的描述符。所以
a.b
不可修改,aa.b
可以修改。因为默认情况下,通过
Object.defineProperty()
定义的属性的属性值均为false
是不可写的.而通过对象字面量定义的属性默认是可写的,调用`
所以
aa
的b
属性是可写的. 所以Object.defineProperty()
并不改变属性的属性值.所以aa
的b
的值会改变.