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

docs(function): edit error

This commit is contained in:
ruanyf 2018-01-26 05:38:46 +08:00
parent 6097cc302f
commit b2a2c581bb
2 changed files with 18 additions and 10 deletions

View File

@ -1331,7 +1331,7 @@ clownsEverywhere(
## catch 语句的参数
目前,有一个[提案](https://github.com/tc39/proposal-optional-catch-binding),允许`try...catch`结构`catch`语句调用时不带有参数。这个提案跟参数有关,也放在这一章介绍。
ES2018 [允许](https://github.com/tc39/proposal-optional-catch-binding)`try...catch`结构的`catch`语句不带有参数。这个提案跟参数有关,也放在这一章介绍。
传统的写法是`catch`语句必须带有参数,用来接收`try`代码块抛出的错误。
@ -1343,6 +1343,8 @@ try {
}
```
上面代码中,即使没有用到`error`,传统写法也是不允许省略。
新的写法允许省略`catch`后面的参数,而不报错。
```javascript
@ -1364,4 +1366,4 @@ try {
}
```
上面代码中,`JSON.parse`报错只有一种可能:解析失败。因此,可以不需要抛出的错误实例
上面代码中,`JSON.parse`报错只有一种可能:解析失败。所以一旦报错,基本上不需要用到错误实例,所以可以省略`catch`后面的参数

View File

@ -569,13 +569,17 @@ a2[1] = 6;
class MyArray extends Array {
}
const a = new MyArray();
a.map(x => x) instanceof MyArray // true
const a = new MyArray(1, 2, 3);
const b = a.map(x => x);
const c = a.filter(x => x > 1);
b instanceof MyArray // true
c instanceof MyArray // true
```
上面代码中,子类`MyArray`继承了父类`Array``a.map(x => x)`会创建一个`MyArray`的衍生对象,该衍生对象还是`MyArray`的实例。
上面代码中,子类`MyArray`继承了父类`Array``a``MyArray`的实例,`b``c``a`的衍生对象。你可能会认为,`b``c`都是调用数组方法生成的,所以应该是数组(`Array`的实例),但实际上它们也`MyArray`的实例。
现在,`MyArray`设置`Symbol.species`属性。
`Symbol.species`属性就是为了解决这个问题而提供的。现在,我们可以为`MyArray`设置`Symbol.species`属性。
```javascript
class MyArray extends Array {
@ -583,7 +587,7 @@ class MyArray extends Array {
}
```
上面代码中,由于定义了`Symbol.species`属性,创建衍生对象时就会使用这个属性返回的函数,作为构造函数。这个例子也说明,定义`Symbol.species`属性要采用`get`取器。默认的`Symbol.species`属性等同于下面的写法。
上面代码中,由于定义了`Symbol.species`属性,创建衍生对象时就会使用这个属性返回的函数,作为构造函数。这个例子也说明,定义`Symbol.species`属性要采用`get`器。默认的`Symbol.species`属性等同于下面的写法。
```javascript
static get [Symbol.species]() {
@ -599,11 +603,13 @@ class MyArray extends Array {
}
const a = new MyArray();
a.map(x => x) instanceof MyArray // false
a.map(x => x) instanceof Array // true
const b = a.map(x => x);
b instanceof MyArray // false
b instanceof Array // true
```
上面代码中,`a.map(x => x)`创建的衍生对象,就不是`MyArray`的实例,而直接就是`Array`的实例。
上面代码中,`a.map(x => x)`生成的衍生对象,就不是`MyArray`的实例,而直接就是`Array`的实例。
再看一个例子。