@@ -45,7 +45,7 @@ JavaScript 提供了一个内部数据结构,用来描述对象的属性,控
45
45
46
46
## Object.getOwnPropertyDescriptor()
47
47
48
- ` Object.getOwnPropertyDescriptor ` 方法可以获取属性描述对象。它的第一个参数是一个对象 ,第二个参数是一个字符串,对应该对象的某个属性名 。
48
+ ` Object.getOwnPropertyDescriptor() ` 方法可以获取属性描述对象。它的第一个参数是目标对象 ,第二个参数是一个字符串,对应目标对象的某个属性名 。
49
49
50
50
``` javascript
51
51
var obj = { p: ' a' };
@@ -58,9 +58,9 @@ Object.getOwnPropertyDescriptor(obj, 'p')
58
58
// }
59
59
```
60
60
61
- 上面代码中,` Object.getOwnPropertyDescriptor ` 方法获取` obj.p ` 的属性描述对象。
61
+ 上面代码中,` Object.getOwnPropertyDescriptor() ` 方法获取` obj.p ` 的属性描述对象。
62
62
63
- 注意,` Object.getOwnPropertyDescriptor ` 方法只能用于对象自身的属性,不能用于继承的属性。
63
+ 注意,` Object.getOwnPropertyDescriptor() ` 方法只能用于对象自身的属性,不能用于继承的属性。
64
64
65
65
``` javascript
66
66
var obj = { p: ' a' };
@@ -69,7 +69,7 @@ Object.getOwnPropertyDescriptor(obj, 'toString')
69
69
// undefined
70
70
```
71
71
72
- 上面代码中,` toString ` 是` Obj ` 对象继承的属性,` Object.getOwnPropertyDescriptor ` 无法获取。
72
+ 上面代码中,` toString ` 是` obj ` 对象继承的属性,` Object.getOwnPropertyDescriptor() ` 无法获取。
73
73
74
74
## Object.getOwnPropertyNames()
75
75
@@ -108,17 +108,17 @@ Object.getOwnPropertyNames(Object.prototype)
108
108
109
109
## Object.defineProperty(),Object.defineProperties()
110
110
111
- ` Object.defineProperty ` 方法允许通过属性描述对象,定义或修改一个属性,然后返回修改后的对象,它的用法如下。
111
+ ` Object.defineProperty() ` 方法允许通过属性描述对象,定义或修改一个属性,然后返回修改后的对象,它的用法如下。
112
112
113
113
``` javascript
114
114
Object .defineProperty (object, propertyName, attributesObject)
115
115
```
116
116
117
117
` Object.defineProperty ` 方法接受三个参数,依次如下。
118
118
119
- - 属性所在的对象
120
- - 属性名(它应该是一个字符串)
121
- - 属性描述对象
119
+ - object: 属性所在的对象
120
+ - propertyName:字符串,表示属性名
121
+ - attributesObject: 属性描述对象
122
122
123
123
举例来说,定义` obj.p ` 可以写成下面这样。
124
124
@@ -136,11 +136,11 @@ obj.p = 246;
136
136
obj .p // 123
137
137
```
138
138
139
- 上面代码中,` Object.defineProperty ` 方法定义了` obj.p ` 属性。由于属性描述对象的` writable ` 属性为` false ` ,所以` obj.p ` 属性不可写。注意,这里的` Object.defineProperty ` 方法的第一个参数是` {} ` (一个新建的空对象),` p ` 属性直接定义在这个空对象上面,然后返回这个对象,这是` Object.defineProperty ` 的常见写法 。
139
+ 上面代码中,` Object.defineProperty() ` 方法定义了` obj.p ` 属性。由于属性描述对象的` writable ` 属性为` false ` ,所以` obj.p ` 属性不可写。注意,这里的` Object.defineProperty ` 方法的第一个参数是` {} ` (一个新建的空对象),` p ` 属性直接定义在这个空对象上面,然后返回这个对象,这是` Object.defineProperty() ` 的常见用法 。
140
140
141
- 如果属性已经存在,` Object.defineProperty ` 方法相当于更新该属性的属性描述对象。
141
+ 如果属性已经存在,` Object.defineProperty() ` 方法相当于更新该属性的属性描述对象。
142
142
143
- 如果一次性定义或修改多个属性,可以使用` Object.defineProperties ` 方法。
143
+ 如果一次性定义或修改多个属性,可以使用` Object.defineProperties() ` 方法。
144
144
145
145
``` javascript
146
146
var obj = Object .defineProperties ({}, {
@@ -157,7 +157,7 @@ obj.p2 // "abc"
157
157
obj .p3 // "123abc"
158
158
```
159
159
160
- 上面代码中,` Object.defineProperties ` 同时定义了` obj ` 对象的三个属性。其中,` p3 ` 属性定义了取值函数` get ` ,即每次读取该属性,都会调用这个取值函数。
160
+ 上面代码中,` Object.defineProperties() ` 同时定义了` obj ` 对象的三个属性。其中,` p3 ` 属性定义了取值函数` get ` ,即每次读取该属性,都会调用这个取值函数。
161
161
162
162
注意,一旦定义了取值函数` get ` (或存值函数` set ` ),就不能将` writable ` 属性设为` true ` ,或者同时定义` value ` 属性,否则会报错。
163
163
@@ -181,7 +181,7 @@ Object.defineProperty(obj, 'p', {
181
181
182
182
上面代码中,同时定义了` get ` 属性和` value ` 属性,以及将` writable ` 属性设为` true ` ,就会报错。
183
183
184
- ` Object.defineProperty() ` 和` Object.defineProperties() ` 的第三个参数,是一个属性对象。它的 ` writable ` 、` configurable ` 、` enumerable ` 这三个属性的默认值都为` false ` 。
184
+ ` Object.defineProperty() ` 和` Object.defineProperties() ` 参数里面的属性描述对象, ` writable ` 、` configurable ` 、` enumerable ` 这三个属性的默认值都为` false ` 。
185
185
186
186
``` javascript
187
187
var obj = {};
@@ -195,11 +195,11 @@ Object.getOwnPropertyDescriptor(obj, 'foo')
195
195
// }
196
196
```
197
197
198
- 上面代码中,定义` obj.p ` 时用了一个空的属性描述对象,就可以看到各个元属性的默认值。
198
+ 上面代码中,定义` obj.foo ` 时用了一个空的属性描述对象,就可以看到各个元属性的默认值。
199
199
200
200
## Object.prototype.propertyIsEnumerable()
201
201
202
- 实例对象的` propertyIsEnumerable ` 方法返回一个布尔值,用来判断某个属性是否可遍历。
202
+ 实例对象的` propertyIsEnumerable() ` 方法返回一个布尔值,用来判断某个属性是否可遍历。注意,这个方法只能用于判断对象自身的属性,对于继承的属性一律返回 ` false ` 。
203
203
204
204
``` javascript
205
205
var obj = {};
@@ -209,7 +209,7 @@ obj.propertyIsEnumerable('p') // true
209
209
obj .propertyIsEnumerable (' toString' ) // false
210
210
```
211
211
212
- 上面代码中,` obj.p ` 是可遍历的,而继承自原型对象的 ` obj.toString ` 属性是不可遍历的 。
212
+ 上面代码中,` obj.p ` 是可遍历的,而 ` obj.toString ` 是继承的属性 。
213
213
214
214
## 元属性
215
215
0 commit comments