1
0
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:
ruanyf 2017-11-09 08:47:27 +08:00
parent 91f2a50e25
commit 535dd1ff98

View File

@ -231,7 +231,7 @@ let b = new B();
上面代码中,属性`x`是定义在`A.prototype`上面的,所以`super.x`可以取到它的值。
ES6 规定,通过`super`调用父类的方法时,`super`会绑定子类的`this`
ES6 规定,通过`super`调用父类的方法时,方法内部的`this`指向子类
```javascript
class A {
@ -257,9 +257,9 @@ let b = new B();
b.m() // 2
```
上面代码中,`super.print()`虽然调用的是`A.prototype.print()`,但是`A.prototype.print()`会绑定子类`B``this`,导致输出的是`2`,而不是`1`。也就是说,实际上执行的是`super.print.call(this)`
上面代码中,`super.print()`虽然调用的是`A.prototype.print()`,但是`A.prototype.print()`内部的`this`指向子类`B`,导致输出的是`2`,而不是`1`。也就是说,实际上执行的是`super.print.call(this)`
由于绑定子类的`this`,所以如果通过`super`对某个属性赋值,这时`super`就是`this`,赋值的属性会变成子类实例的属性。
由于`this`指向子类,所以如果通过`super`对某个属性赋值,这时`super`就是`this`,赋值的属性会变成子类实例的属性。
```javascript
class A {
@ -342,7 +342,7 @@ class B extends A {
let b = new B();
```
上面代码中,`super.valueOf()`表明`super`是一个对象,因此就不会报错。同时,由于`super`绑定`B``this`,所以`super.valueOf()`返回的是一个`B`的实例。
上面代码中,`super.valueOf()`表明`super`是一个对象,因此就不会报错。同时,由于`super`使得`this`指向`B`,所以`super.valueOf()`返回的是一个`B`的实例。
最后,由于对象总是继承其他对象的,所以可以在任意一个对象中,使用`super`关键字。