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.指向父类,再静态方法中