1,将优点为我所用——组合继承
//组合式继承
//声明父类
function SuperClass (name) {
//值类型共有属性
this.name = name;
//引用类型共有属性
this.books = ["html", "css", "JavaScript"];
}
//父类原型共有方法
SuperClass.prototype.getName = function() {
console.log(this.name);
};
//声明子类
function SubClass = function (name, time) {
//构造函数式继承父类name属性
SuperClass.call(this,name);
//子类中新增共有属性
this.time = time;
}
//类式继承,子类原型继承父类
SubClass.prototype = new SuperClass();
//子类原型方法
SubClass.prototype.getTime = function () {
console.log(this.time);
}
组合式继承,在使用构造函数继承时执行了一遍父类构造函数,而在实现子类原型的类式继承时又调用了一遍父类构造函数。因此父类构造函数调用了两次,所以不是最完美的构造方法。
2,洁净的继承者——原型式继承
借助原型prototype可以根据已有的对象创建一个新的对象,同时不必创建新的自定义对象类型。实现代码如下:
//原型式继承
function inheritObject (o) {
//声明一个过度函数对象
function F () {
//过度对象的原型继承父类对象
F.prototype = o;
//返回过度对象的一个实例,该实例的原型继承了父对象
return new F();
}