1
0
mirror of https://github.com/ruanyf/es6tutorial.git synced 2025-05-28 21:32:20 +00:00

update reflect

This commit is contained in:
new9xgh 2018-11-22 14:23:18 +08:00
parent 5e71c78b5b
commit bdc65fb29d

View File

@ -42,7 +42,7 @@ Proxy(target, {
set: function(target, name, value, receiver) { set: function(target, name, value, receiver) {
var success = Reflect.set(target,name, value, receiver); var success = Reflect.set(target,name, value, receiver);
if (success) { if (success) {
log('property ' + name + ' on ' + target + ' set to ' + value); console.log('property ' + name + ' on ' + target + ' set to ' + value);
} }
return success; return success;
} }
@ -186,7 +186,7 @@ myObject.foo // 4
myReceiverObject.foo // 1 myReceiverObject.foo // 1
``` ```
注意,如果 Proxy 对象和 Reflect 对象联合使用,前者拦截赋值操作,后者完成赋值的默认行为,而且传入了`receiver`,那么`Reflect.set`会触发`Proxy.defineProperty`拦截。 注意,如果 `Proxy`对象和 `Reflect`对象联合使用,前者拦截赋值操作,后者完成赋值的默认行为,而且传入了`receiver`,那么`Reflect.set`会触发`Proxy.defineProperty`拦截。
```javascript ```javascript
let p = { let p = {
@ -210,7 +210,7 @@ obj.a = 'A';
// defineProperty // defineProperty
``` ```
上面代码中,`Proxy.set`拦截里面使用了`Reflect.set`,而且传入了`receiver`,导致触发`Proxy.defineProperty`拦截。这是因为`Proxy.set``receiver`参数总是指向当前的 Proxy 实例(即上例的`obj`),而`Reflect.set`一旦传入`receiver`,就会将属性赋值到`receiver`上面(即`obj`),导致触发`defineProperty`拦截。如果`Reflect.set`没有传入`receiver`,那么就不会触发`defineProperty`拦截。 上面代码中,`Proxy.set`拦截里面使用了`Reflect.set`,而且传入了`receiver`,导致触发`Proxy.defineProperty`拦截。这是因为`Proxy.set``receiver`参数总是指向当前的 `Proxy`实例(即上例的`obj`),而`Reflect.set`一旦传入`receiver`,就会将属性赋值到`receiver`上面(即`obj`),导致触发`defineProperty`拦截。如果`Reflect.set`没有传入`receiver`,那么就不会触发`defineProperty`拦截。
```javascript ```javascript
let p = { let p = {