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

浙公网安备 33010602011771号