javascript - 关于defineProperty的value
给我你的怀抱
给我你的怀抱 2017-06-26 10:54:03
[JavaScript讨论组]
> 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
而使用对象字面量定义的属性描述符均为 true,可以通过 Object.getOwnPropertyDescriptor(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的值会改变.

热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板
关于我们 免责申明 意见反馈 讲师合作 广告合作 最新更新 English
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送
PHP中文网APP
随时随地碎片化学习
PHP中文网抖音号
发现有趣的

Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号