@@ -642,6 +642,7 @@ var p = new Proxy(function() {}, {
642642});
643643
644644new 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