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

docs: edit Object

This commit is contained in:
ruanyf 2017-06-04 12:42:27 +08:00
parent 75dadfdda1
commit d0865f0773

View File

@ -632,40 +632,40 @@ Object.getOwnPropertyDescriptor(class {foo() {}}.prototype, 'foo').enumerable
## 属性的遍历
ES6一共有5种方法可以遍历对象的属性。
ES6 一共有5种方法可以遍历对象的属性。
**1for...in**
`for...in`循环遍历对象自身的和继承的可枚举属性不含Symbol属性
`for...in`循环遍历对象自身的和继承的可枚举属性(不含 Symbol 属性)。
**2Object.keys(obj)**
`Object.keys`返回一个数组包括对象自身的不含继承的所有可枚举属性不含Symbol属性
`Object.keys`返回一个数组,包括对象自身的(不含继承的)所有可枚举属性(不含 Symbol 属性)。
**3Object.getOwnPropertyNames(obj)**
`Object.getOwnPropertyNames`返回一个数组包含对象自身的所有属性不含Symbol属性但是包括不可枚举属性
`Object.getOwnPropertyNames`返回一个数组,包含对象自身的所有属性(不含 Symbol 属性,但是包括不可枚举属性)。
**4Object.getOwnPropertySymbols(obj)**
`Object.getOwnPropertySymbols`返回一个数组包含对象自身的所有Symbol属性。
`Object.getOwnPropertySymbols`返回一个数组,包含对象自身的所有 Symbol 属性。
**5Reflect.ownKeys(obj)**
`Reflect.ownKeys`返回一个数组包含对象自身的所有属性不管属性名是Symbol或字符串也不管是否可枚举。
`Reflect.ownKeys`返回一个数组,包含对象自身的所有属性,不管属性名是 Symbol 或字符串,也不管是否可枚举。
以上的5种方法遍历对象的属性都遵守同样的属性遍历的次序规则。
- 首先遍历所有属性名为数值的属性,按照数字排序。
- 其次遍历所有属性名为字符串的属性,按照生成时间排序。
- 最后遍历所有属性名为Symbol值的属性按照生成时间排序。
- 最后遍历所有属性名为 Symbol 值的属性,按照生成时间排序。
```javascript
Reflect.ownKeys({ [Symbol()]:0, b:0, 10:0, 2:0, a:0 })
// ['2', '10', 'b', 'a', Symbol()]
```
上面代码中,`Reflect.ownKeys`方法返回一个数组,包含了参数对象的所有属性。这个数组的属性次序是这样的,首先是数值属性`2``10`,其次是字符串属性`b``a`最后是Symbol属性。
上面代码中,`Reflect.ownKeys`方法返回一个数组,包含了参数对象的所有属性。这个数组的属性次序是这样的,首先是数值属性`2``10`,其次是字符串属性`b``a`,最后是 Symbol 属性。
## `__proto__`属性Object.setPrototypeOf()Object.getPrototypeOf()
@ -1337,6 +1337,10 @@ let a = {a: 'a'};
let b = {b: 'b'};
let c = {c: 'c'};
let d = mix(c).with(a, b);
d.c // "c"
d.b // "b"
d.a // "a"
```
上面代码中,对象`a``b`被混入了对象`c`