ES5:
继承:
1.通过原型链实现继承。子类的prototype为父类对象的一个实例,因此子类的原型对象包含指向父类的原型对象的指针,父类的实例属性成为子类原型属性
2.ES5 的继承,实质是先创造子类的实例对象this
,然后再将父类的方法添加到this
上面(Parent.apply(this)
)
ES6:
继承:
1.子类没有自己的this对象,因此必须在construct中通过super继承父类的this对象,而后对此this对象进行加工。super
关键字在构造函数中表示父类的构造函数,用来新建父类的this
对象。
2.ES6 的继承机制完全不同,实质是先创造父类的实例对象this
(所以必须先调用super
方法),然后再用子类的构造函数修改this
。
3.super可作为函数和对象使用。当作为函数使用时,只可在子类的构造函数中使用,表示父类的构造函数,但是super中的this指向的是子类的实例,因此在子类中super()表示的是Parent.prototype.constructor.call(this)
。当作为对象使用时,super表示父类原型对象,即Parent.prototype。
类的prototype属性及_proto_属性:
每个构造器都有一个prototy