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:
parent
6097cc302f
commit
b2a2c581bb
@ -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`后面的参数。
|
||||
|
@ -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`的实例。
|
||||
|
||||
再看一个例子。
|
||||
|
||||
|
Loading…
x
Reference in New Issue
Block a user