File tree Expand file tree Collapse file tree 1 file changed +3
-2
lines changed Expand file tree Collapse file tree 1 file changed +3
-2
lines changed Original file line number Diff line number Diff line change @@ -445,7 +445,7 @@ obj.p2 // 2
445
445
446
446
除了直接定义以外,属性还可以用存取器(accessor)定义。其中,存值函数称为` setter ` ,使用属性描述对象的` set ` 属性;取值函数称为` getter ` ,使用属性描述对象的` get ` 属性。
447
447
448
- 一旦对目标属性定义了存取器,那么存取的时候,都将执行对应的函数。利用这个功能,可以实现许多高级特性,比如某个属性禁止赋值 。
448
+ 一旦对目标属性定义了存取器,那么存取的时候,都将执行对应的函数。利用这个功能,可以实现许多高级特性,比如定制属性的读取和赋值行为 。
449
449
450
450
``` javascript
451
451
var obj = Object .defineProperty ({}, ' p' , {
@@ -466,6 +466,7 @@ obj.p = 123 // "setter: 123"
466
466
JavaScript 还提供了存取器的另一种写法。
467
467
468
468
``` javascript
469
+ // 写法二
469
470
var obj = {
470
471
get p () {
471
472
return ' getter' ;
@@ -476,7 +477,7 @@ var obj = {
476
477
};
477
478
```
478
479
479
- 上面的写法与定义属性描述对象是等价的,而且使用更广泛 。
480
+ 上面两种写法,虽然属性 ` p ` 的读取和赋值行为是一样的,但是有一些细微的区别。第一种写法,属性 ` p ` 的 ` configurable ` 和 ` enumerable ` 都为 ` false ` ,从而导致属性 ` p ` 是不可遍历的;第二种写法,属性 ` p ` 的 ` configurable ` 和 ` enumerable ` 都为 ` true ` ,因此属性 ` p ` 是可遍历的。实际开发中,写法二更常用 。
480
481
481
482
注意,取值函数` get ` 不能接受参数,存值函数` set ` 只能接受一个参数(即属性的值)。
482
483
You can’t perform that action at this time.
0 commit comments