素材牛VIP会员
JS的数据描述符和存取描述符,相当于两种规则,只能选取一种规则?
 阿***7  分类:Html5  人气:1598  回帖:5  发布于6年前 收藏

1: 给对象属性设置属性描述符, 设置数据描述符或者存取描述符,只会启用其中一种
2:

3: get方法没有效果了.

讨论这个帖子(5)垃圾回帖将一律封号处理……

Lv2 入门
踏***C UI设计师 6年前#1

get和value是矛盾的吧,如果你设置不同的值,你取值的时候应该听谁的呢。

Lv5 码农
Ca***on 职业无 6年前#2

用get设置属性时,默认configurable是true,
后面用数据描述符重新定义属性将原来的覆盖掉了

Lv6 码匠
黑***心 移动开发工程师 6年前#3

JS的数据描述符和存取描述符只能选取一种规则。
ToPropertyDescriptor规范定义部分如下:

If either desc.[[Get]] or desc.[[Set]] is present, then
If either desc.[[Value]] or desc.[[Writable]] is present, throw a TypeError exception.

以上说明如果在使用defineProperty方法的时候,如果同时定义了这两种描述符,会报错,测试截图如下:

另外,如果使用一种描述符定义属性后,再使用另一种属性描述符重新定义也是可以的,只不过两种描述符不共有的描述符会重置为默认值。
ValidateAndApplyPropertyDescriptor规范定义部分如下:

测试截图如下:

Lv6 码匠
lo***yo UI设计师 6年前#4

属性分两种:

  • 数据属性:描述是 Configurable, Enumerable, Writable, Value

  • 访问器属性:描述是 Configurable, Enumerable, Get, Set

我理解第二次相当于把 b 定义成数据属性了,所以没有 get 和 set

Lv7 码师
su***se Web前端工程师 6年前#5

对象里目前存在的属性描述符有两种主要形式:数据描述符和存取描述符。数据描述符是一个拥有可写或不可写值的属性。存取描述符是由一对 getter-setter 函数功能来描述的属性。描述符必须是两种形式之一;不能同时是两者。

 文明上网,理性发言!   😉 阿里云幸运券,戳我领取