diff --git a/docs/async.md b/docs/async.md index 4624126..64d1ac1 100644 --- a/docs/async.md +++ b/docs/async.md @@ -757,7 +757,7 @@ async function f() { // 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 操作的异步接口,可以直接放入这个循环。 diff --git a/docs/class-extends.md b/docs/class-extends.md index 7a6022e..15cb0a6 100644 --- a/docs/class-extends.md +++ b/docs/class-extends.md @@ -231,7 +231,7 @@ let b = new B(); 上面代码中,属性`x`是定义在`A.prototype`上面的,所以`super.x`可以取到它的值。 -ES6 规定,在子类普通方法中通过`super`调用父类的方法(此时调用的是父类普通方法,因为`super`指向父类的原型对象)时,方法内部的`this`指向当前的子类实例;在子类静态方法中通过`super`调用父类的方法(此时调用的是父类静态方法,因为`super`指向父类)时,方法内部的`this`指向当前的子类; +ES6 规定,在子类普通方法中通过`super`调用父类的方法时,方法内部的`this`指向当前的子类实例。 ```javascript class A { @@ -314,6 +314,34 @@ child.myMethod(2); // instance 2 上面代码中,`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`的时候,必须显式指定是作为函数、还是作为对象使用,否则会报错。 ```javascript diff --git a/docs/regex.md b/docs/regex.md index cf45072..4ee07ed 100644 --- a/docs/regex.md +++ b/docs/regex.md @@ -368,7 +368,7 @@ const RE_DOLLAR_PREFIX = /(?<=\$)foo/g; “后行断言”的实现,需要先匹配`/(?<=y)x/`的`x`,然后再回到左边,匹配`y`的部分。这种“先右后左”的执行顺序,与所有其他正则操作相反,导致了一些不符合预期的行为。 -首先,”后行断言“的组匹配,与正常情况下结果是不一样的。 +首先,后行断言的组匹配,与正常情况下结果是不一样的。 ```javascript /(?<=(\d+)(\d+))$/.exec('1053') // ["", "1", "053"]