1
0
mirror of https://github.com/ruanyf/es6tutorial.git synced 2025-05-24 10:22:23 +00:00

docs(proxy): edit proxy.ownkeys

This commit is contained in:
ruanyf 2018-04-18 15:34:42 +08:00
parent 7fab96c932
commit b48a35bebb

View File

@ -129,7 +129,7 @@ fproxy.foo === "Hello, foo" // true
- **set(target, propKey, value, receiver)**:拦截对象属性的设置,比如`proxy.foo = v``proxy['foo'] = v`,返回一个布尔值。
- **has(target, propKey)**:拦截`propKey in proxy`的操作,返回一个布尔值。
- **deleteProperty(target, propKey)**:拦截`delete proxy[propKey]`的操作,返回一个布尔值。
- **ownKeys(target)**:拦截`Object.getOwnPropertyNames(proxy)``Object.getOwnPropertySymbols(proxy)``Object.keys(proxy)`,返回一个数组。该方法返回目标对象所有自身的属性的属性名,而`Object.keys()`的返回结果仅包括目标对象自身的可遍历属性。
- **ownKeys(target)**:拦截`Object.getOwnPropertyNames(proxy)``Object.getOwnPropertySymbols(proxy)``Object.keys(proxy)``for...in`循环,返回一个数组。该方法返回目标对象所有自身的属性的属性名,而`Object.keys()`的返回结果仅包括目标对象自身的可遍历属性。
- **getOwnPropertyDescriptor(target, propKey)**:拦截`Object.getOwnPropertyDescriptor(proxy, propKey)`,返回属性的描述对象。
- **defineProperty(target, propKey, propDesc)**:拦截`Object.defineProperty(proxy, propKey, propDesc``Object.defineProperties(proxy, propDescs)`,返回一个布尔值。
- **preventExtensions(target)**:拦截`Object.preventExtensions(proxy)`,返回一个布尔值。
@ -756,6 +756,7 @@ Object.isExtensible(p) // 报错
- `Object.getOwnPropertyNames()`
- `Object.getOwnPropertySymbols()`
- `Object.keys()`
- `for...in`循环
下面是拦截`Object.keys()`的例子。
@ -850,6 +851,23 @@ Object.getOwnPropertyNames(p)
// [ 'a', 'b', 'c' ]
```
`for...in`循环也受到`ownKeys`方法的拦截。
```javascript
const obj = { hello: 'world' };
const proxy = new Proxy(obj, {
ownKeys: function () {
return ['a', 'b'];
}
});
for (let key in proxy) {
console.log(key); // 没有任何输出
}
```
上面代码中,`ownkeys`指定只返回`a``b`属性,由于`obj`没有这两个属性,因此`for...in`循环不会有任何输出。
`ownKeys`方法返回的数组成员,只能是字符串或 Symbol 值。如果有其他类型的值,或者返回的根本不是数组,就会报错。
```javascript