mirror of
https://github.com/ruanyf/es6tutorial.git
synced 2025-05-29 13:52:22 +00:00
Merge pull request #776 from new9xgh/hofix/update-reflect
update reflect
This commit is contained in:
commit
4674eb12e2
@ -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 = {
|
||||||
|
Loading…
x
Reference in New Issue
Block a user