认识Object.defineProperty()
defineProperty
Object.defineProperty() 方法会直接在一个对象上定义一个新属性,或者修改一个对象的现有属性,并返回此对象。
语法
Object.defineProperty(obj, prop, descriptor)
参数
- obj 要操作的对象
- prop 修改或新增的属性名称
- descriptor 属性描述符
属性描述符
描述符不能两者同时存在,只能是其中一个。
1. 数据描述符 数据描述符是一个具有值的属性,该值可以是可写的,也可以是不可写的。
2. 存取描述符 存取描述符是由 getter 函数和 setter 函数所描述的属性。
数据描述符 和 存取描述符 同时具有的键值:
`configurable` 当该属性的`configurable`为 `true` 时该属性的描述符改变,该属性可以从对象上删除。默认为 `false`。
`enumerable` 当且仅当该属性的 `enumerable` 键值为 true 时,该属性才会出现在对象的枚举属性中。
数据描述符
`value` 该属性对应的值。默认为 `undefined`
`writable` 当该属性的 `writable` 键值为 true 时,属性的值,也就是上面的 `value`,才能被赋值运算符改变。默认值为 `false`
示例
1 | |
2 | |
3 | |
4 | |
5 | |
6 | |
7 | |
8 | |
9 | |
10 | |
11 | |
12 | |
13 | |
14 | |
15 | |
16 | |
17 | |
18 | |
19 | |
20 | |
21 | |
22 | |
23 | |
24 | |
25 | |
26 | |
27 | |
28 | |
29 | |
30 | |
31 | |
32 | |
33 | |
34 | |
35 | |
36 | |
37 | |
38 | |
39 | |
40 | |
存取描述符
`get` 属性的 `getter` 函数,如果没有 `getter`,则为 `undefined`。当访问该属性时,会调用此函数。该函数的返回值会被用作属性的值。默认为 `undefined`。
`set` 属性的 setter 函数,如果没有 setter,则为 undefined。当属性值被修改时,会调用此函数。默认为 `undefined`。
示例
1 | |
2 | |
3 | |
4 | |
5 | |
6 | |
7 | |
8 | |
9 | |
10 | |
11 | |
12 | |
13 | |
14 | |
15 | |
16 | |
17 | |
18 | |
19 | |
20 | |
21 | |
22 | |
23 | |
24 | |
25 | |
26 | |
27 | |
本博客所有文章除特别声明外,均采用 CC BY-SA 4.0 协议 ,转载请注明出处!