mirror of
https://github.com/ruanyf/es6tutorial.git
synced 2025-05-24 18:32:22 +00:00
docs(class-extends): edit class-extends
This commit is contained in:
parent
02928d1820
commit
5e2ed331aa
@ -757,7 +757,7 @@ async function f() {
|
|||||||
// b
|
// b
|
||||||
```
|
```
|
||||||
|
|
||||||
上面代码中,`createAsyncIterable()`返回一个拥有异步遍历器的对象,`for...of`循环自动调用这个对象的异步遍历器的`next`方法,会得到一个 Promise 对象。`await`用来处理这个 Promise 对象,一旦`resolve`,就把得到的值(`x`)传入`for...of`的循环体。
|
上面代码中,`createAsyncIterable()`返回一个拥有异步遍历器接口的对象,`for...of`循环自动调用这个对象的异步遍历器的`next`方法,会得到一个 Promise 对象。`await`用来处理这个 Promise 对象,一旦`resolve`,就把得到的值(`x`)传入`for...of`的循环体。
|
||||||
|
|
||||||
`for await...of`循环的一个用途,是部署了 asyncIterable 操作的异步接口,可以直接放入这个循环。
|
`for await...of`循环的一个用途,是部署了 asyncIterable 操作的异步接口,可以直接放入这个循环。
|
||||||
|
|
||||||
|
@ -231,7 +231,7 @@ let b = new B();
|
|||||||
|
|
||||||
上面代码中,属性`x`是定义在`A.prototype`上面的,所以`super.x`可以取到它的值。
|
上面代码中,属性`x`是定义在`A.prototype`上面的,所以`super.x`可以取到它的值。
|
||||||
|
|
||||||
ES6 规定,在子类普通方法中通过`super`调用父类的方法(此时调用的是父类普通方法,因为`super`指向父类的原型对象)时,方法内部的`this`指向当前的子类实例;在子类静态方法中通过`super`调用父类的方法(此时调用的是父类静态方法,因为`super`指向父类)时,方法内部的`this`指向当前的子类;
|
ES6 规定,在子类普通方法中通过`super`调用父类的方法时,方法内部的`this`指向当前的子类实例。
|
||||||
|
|
||||||
```javascript
|
```javascript
|
||||||
class A {
|
class A {
|
||||||
@ -314,6 +314,34 @@ child.myMethod(2); // instance 2
|
|||||||
|
|
||||||
上面代码中,`super`在静态方法之中指向父类,在普通方法之中指向父类的原型对象。
|
上面代码中,`super`在静态方法之中指向父类,在普通方法之中指向父类的原型对象。
|
||||||
|
|
||||||
|
另外,在子类的静态方法中通过`super`调用父类的方法时,方法内部的`this`指向当前的子类,而不是子类的实例。
|
||||||
|
|
||||||
|
```javascript
|
||||||
|
class A {
|
||||||
|
constructor() {
|
||||||
|
this.x = 1;
|
||||||
|
}
|
||||||
|
static print() {
|
||||||
|
console.log(this.x);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
class B extends A {
|
||||||
|
constructor() {
|
||||||
|
super();
|
||||||
|
this.x = 2;
|
||||||
|
}
|
||||||
|
static m() {
|
||||||
|
super.print();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
B.x = 3;
|
||||||
|
B.m() // 3
|
||||||
|
```
|
||||||
|
|
||||||
|
上面代码中,静态方法`B.m`里面,`super.print`指向父类的静态方法。这个方法里面的`this`指向的是`B`,而不是`B`的实例。
|
||||||
|
|
||||||
注意,使用`super`的时候,必须显式指定是作为函数、还是作为对象使用,否则会报错。
|
注意,使用`super`的时候,必须显式指定是作为函数、还是作为对象使用,否则会报错。
|
||||||
|
|
||||||
```javascript
|
```javascript
|
||||||
|
@ -368,7 +368,7 @@ const RE_DOLLAR_PREFIX = /(?<=\$)foo/g;
|
|||||||
|
|
||||||
“后行断言”的实现,需要先匹配`/(?<=y)x/`的`x`,然后再回到左边,匹配`y`的部分。这种“先右后左”的执行顺序,与所有其他正则操作相反,导致了一些不符合预期的行为。
|
“后行断言”的实现,需要先匹配`/(?<=y)x/`的`x`,然后再回到左边,匹配`y`的部分。这种“先右后左”的执行顺序,与所有其他正则操作相反,导致了一些不符合预期的行为。
|
||||||
|
|
||||||
首先,”后行断言“的组匹配,与正常情况下结果是不一样的。
|
首先,后行断言的组匹配,与正常情况下结果是不一样的。
|
||||||
|
|
||||||
```javascript
|
```javascript
|
||||||
/(?<=(\d+)(\d+))$/.exec('1053') // ["", "1", "053"]
|
/(?<=(\d+)(\d+))$/.exec('1053') // ["", "1", "053"]
|
||||||
|
Loading…
x
Reference in New Issue
Block a user