javascript中实现继承的方式有很多种,一般都是通过原型链和构造函数来实现。下面对各种实现方式进行分析,总结各自的优缺点。
一 原型继承
|
|
优点:父类的方法(getName)得到了复用。
缺点:同理父类的属性(name)也是复用,即子类实例没有自己的属性。
二 构造函数实现继承
|
|
优点:子类的每个实例都有自己的属性(name),不会相互影响。
缺点:但是继承父类方法的时候就不需要这种特性,没有实现父类方法的复用。
三 组合式继承
|
|
优点:继承了上述两种方式的优点,摒弃了缺点,复用了方法,子类又有各自的属性。
缺点:因为父类构造函数被执行了两次,子类的原型对象(Sub.prototype)中也有一份父类的实例属性(name),而且这些属性会被子类实例(sub1,sub2)的属性覆盖掉(即通过sub1.name访问不到Sub.prototype上的name属性),也存在内存浪费。
四 寄生组合式继承
|
|
五 es6中的class
|
|
由以上结果可以看到es6中的class只不过是一种语法糖,通过上面的验证得知符合寄生组合继承的特点,但这只是猜测,class具体都做了哪些操作还不是很清楚,后面有时间,对class做一下研究。