javascript实现继承之2
在前面的一篇文章JavaScript实现继承介绍过js中通过原型来继承的两种方法
- 伪造对象继承:通过把父类的实例赋值给子类的prototype,然后在子类的构造函数中调用父类的构造方法;
- 类式继承(原型式继承):通过一个空函数中转,把父类的示例赋值给该空函数的原型,然后再把该空函数的prototype赋值给子类的prototype,再在子类的构造方法中调用父类的构造器,实现继承。
综合上面两个方法,其实都通过两次调用父类的构造器来实现,第二种方法相对于第一种只是在子类原型上少了些父类的实例属性。
在《javaScript高级程序》中,介绍了另外一种继承的实现方式,名为"寄生式组合继承"。所谓的寄生式组合继承,不必为了子类的原型而调用超类型的构造函数,要实现继承只需要父类原型的一个副本。下面的具体的代码:
/**
* 寄生式组合继承
* @param subType 子类
* @param superType 父类
**/
function inheritPrototype(subType,subperType){
var prototype = Object(superType.prototype);
prototype.constructor = subType;
subType.prototype = prototype;
}
/**
* 父类
* @param name name属性
**/
function superClass(name) {
this.name = name;
}
superClass.prototype.sayName = function() {
alert(this.name);
};
/**
* 子类
* @param name name属性
* @param age age属性
**/
function subClass(name,age) {
superClass.call(this,name);
this.age = age;
}
// 实现继承
inheritPrototype(subClass,superClass);
这样就只调用了一次父类的构造方法,在性能上更优秀。