ES6 继承

 

ES5中调用new的操作: 1.先创建一个新的对象obj = {}

           2.给新对象obj设置原型属性 obj.__proto__ = A.prototype;

           3.给新对象设置实例属性 A.constructor.apply(obj,args),将属性和方法实例化,constructor中的this指向的是新创建的obj对象

           4.返回构造函数的结果,obj / this / 其他引用对象;

ES6继承:

   继承的实质:先创建父类的构造函数对象this,然后再用子类的构造函数修改this,this指向子类实例。

   主要是通过extends / class 的语法糖(原本已经有的功能,实现理解性和逻辑性更强)

//class的模板

//这种继承方式和ES5的寄生组合继承方式基本一样,将父类的原型对象作为子类的原型对象,父类的实例方法继承给子类。
class Child extends Father{
    
    constructor(x,y){
        super();  //必须得先调用一下父类构造函数,实现继承父类的实例属性,实例属性独有
        
        //实例属性和方法、
        this.y = y;
        this.x = x;
        this.print = this.print.bind(this)//将print方法绑定到this上做为实例方法。这在React中就是这般使用。
    }
    
    static  staticFunction(){
        //静态方法 只能类调用
    }
    print(){
      //类的原型对象的方法,原型对象方法中的this是运行时才确定的。
      return this.x;
    }
}

 super:

   1.作为函数的时候,将指向父类的构造函数

    2.作为对象的时候:

      2.1.指向父类的原型对象

      2.2.指向子类this本身,super调用父类的放的时候

      2.3.指向父类,再静态方法中

原文地址:https://www.cnblogs.com/panjingshuang/p/11906514.html