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

docs(class): edit class/super

This commit is contained in:
ruanyf 2016-12-07 20:08:53 +08:00
parent 51f3119ef6
commit e9fbf72aac

View File

@ -304,7 +304,7 @@ class Foo {}
}
```
上面的代码不会报错,因为`class`继承`Foo`的时候,`Foo`已经有定义了。但是,如果存在`class`的提升,上面代码就会报错,因为`class`会被提升到代码头部,而`let`命令是不提升的,所以导致`class`继承`Foo`的时候,`Foo`还没有定义。
上面的代码不会报错,因为`Bar`继承`Foo`的时候,`Foo`已经有定义了。但是,如果存在`class`的提升,上面代码就会报错,因为`class`会被提升到代码头部,而`let`命令是不提升的,所以导致`Bar`继承`Foo`的时候,`Foo`还没有定义。
### Class表达式
@ -759,7 +759,7 @@ new A() // A
new B() // B
```
上面代码中,`new.target`指向当前正在执行的函数。可以看到,在`super()`执行时,它指向的是子类`B`的构造函数,而不是父类`A`的构造函数。也就是说,`super()`内部的`this`指向的是`B`
上面代码中,`new.target`指向当前正在执行的函数。可以看到,在`super()`执行时,它指向的是子类`B`的构造函数,而不是父类`A`的构造函数。也就是说,`super()`内部的`this`指向的是`B`
作为函数时,`super()`只能用在子类的构造函数之中,用在其他地方就会报错。
@ -773,6 +773,8 @@ class B extends A {
}
```
上面代码中,`super()`用在`B`类的`m`方法之中,就会造成句法错误。
第二种情况,`super`作为对象时,指向父类的原型对象。
```javascript
@ -833,7 +835,7 @@ let b = new B();
上面代码中,属性`x`是定义在`A.prototype`上面的,所以`super.x`可以取到它的值。
ES6 有一个特别规定,就是通过`super`调用父类的方法时,`super`会绑定子类的`this`
ES6 规定,通过`super`调用父类的方法时,`super`会绑定子类的`this`
```javascript
class A {