Skip to content

Commit 0d58e71

Browse files
committed
1.完善报错内容。
2.preventExtensions介绍中,统一代码与描述所用的变量。 3.preventExtensions介绍中,修改代码示例:Object.preventExtensions()方法返回值输出内容。 4.修改“目标对象是不可扩展”括号相关描述中non-extensible 与 extensible的内容
1 parent 5e71c78 commit 0d58e71

File tree

1 file changed

+12
-9
lines changed

1 file changed

+12
-9
lines changed

docs/proxy.md

Lines changed: 12 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -642,6 +642,7 @@ var p = new Proxy(function() {}, {
642642
});
643643

644644
new p() // 报错
645+
// Uncaught TypeError: 'construct' on proxy: trap returned non-object ('1')
645646
```
646647

647648
### deleteProperty()
@@ -689,7 +690,7 @@ proxy.foo = 'bar' // 不会生效
689690

690691
上面代码中,`defineProperty`方法返回`false`,导致添加新属性总是无效。
691692

692-
注意,如果目标对象不可扩展(extensible),则`defineProperty`不能增加目标对象上不存在的属性,否则会报错。另外,如果目标对象的某个属性不可写(writable)或不可配置(configurable),则`defineProperty`方法不得改变这两个设置。
693+
注意,如果目标对象不可扩展(non-extensible),则`defineProperty`不能增加目标对象上不存在的属性,否则会报错。另外,如果目标对象的某个属性不可写(writable)或不可配置(configurable),则`defineProperty`方法不得改变这两个设置。
693694

694695
### getOwnPropertyDescriptor()
695696

@@ -740,7 +741,7 @@ Object.getPrototypeOf(p) === proto // true
740741

741742
上面代码中,`getPrototypeOf`方法拦截`Object.getPrototypeOf()`,返回`proto`对象。
742743

743-
注意,`getPrototypeOf`方法的返回值必须是对象或者`null`,否则报错。另外,如果目标对象不可扩展(extensible), `getPrototypeOf`方法必须返回目标对象的原型对象。
744+
注意,`getPrototypeOf`方法的返回值必须是对象或者`null`,否则报错。另外,如果目标对象不可扩展(non-extensible), `getPrototypeOf`方法必须返回目标对象的原型对象。
744745

745746
### isExtensible()
746747

@@ -778,7 +779,8 @@ var p = new Proxy({}, {
778779
}
779780
});
780781

781-
Object.isExtensible(p) // 报错
782+
Object.isExtensible(p)
783+
// Uncaught TypeError: 'isExtensible' on proxy: trap result does not reflect extensibility of proxy target (which is 'true')
782784
```
783785

784786
### ownKeys()
@@ -967,31 +969,32 @@ Object.getOwnPropertyNames(p)
967969
这个方法有一个限制,只有目标对象不可扩展时(即`Object.isExtensible(proxy)``false`),`proxy.preventExtensions`才能返回`true`,否则会报错。
968970

969971
```javascript
970-
var p = new Proxy({}, {
972+
var proxy = new Proxy({}, {
971973
preventExtensions: function(target) {
972974
return true;
973975
}
974976
});
975977

976-
Object.preventExtensions(p) // 报错
978+
Object.preventExtensions(proxy)
979+
// Uncaught TypeError: 'preventExtensions' on proxy: trap returned truish but the proxy target is extensible
977980
```
978981

979982
上面代码中,`proxy.preventExtensions`方法返回`true`,但这时`Object.isExtensible(proxy)`会返回`true`,因此报错。
980983

981984
为了防止出现这个问题,通常要在`proxy.preventExtensions`方法里面,调用一次`Object.preventExtensions`
982985

983986
```javascript
984-
var p = new Proxy({}, {
987+
var proxy = new Proxy({}, {
985988
preventExtensions: function(target) {
986989
console.log('called');
987990
Object.preventExtensions(target);
988991
return true;
989992
}
990993
});
991994

992-
Object.preventExtensions(p)
995+
Object.preventExtensions(proxy)
993996
// "called"
994-
// true
997+
// Proxy {}
995998
```
996999

9971000
### setPrototypeOf()
@@ -1015,7 +1018,7 @@ Object.setPrototypeOf(proxy, proto);
10151018

10161019
上面代码中,只要修改`target`的原型对象,就会报错。
10171020

1018-
注意,该方法只能返回布尔值,否则会被自动转为布尔值。另外,如果目标对象不可扩展(extensible),`setPrototypeOf`方法不得改变目标对象的原型。
1021+
注意,该方法只能返回布尔值,否则会被自动转为布尔值。另外,如果目标对象不可扩展(non-extensible),`setPrototypeOf`方法不得改变目标对象的原型。
10191022

10201023
## Proxy.revocable()
10211024

0 commit comments

Comments
 (0)