构造继承
使用父类的构造函数来增强子类。复制父类的构造属性给子类 (父类的原型复制不到)。
//动物类
function Animal(name, sex) {
this.name = name || 'Animal';
this.sex = sex || '未知';
this.sleep = function () {
console.log(this.name + "在睡觉!");
}
}
//添加原型属性和方法
Animal.prototype = {
eat: function () {
console.log(this.name + "在吃饭!");
},
play: function () {
console.log(this.name + "在玩!");
}
}
//科目类
function Type(type) {
this.type = type || '类型';
}
Type.prototype.paTree = function (args) {
console.log(args);
}
function Cat(name, sex, type) {
Animal.call(this, name, sex);
Type.call(this, type);
}
var cat = new Cat('小黑', '公', '猫科');
cat.sleep();
console.log(cat);
//子类的实例是本身
console.log(cat instanceof Cat);//true
console.log(cat instanceof Animal);//false
console.log(cat instanceof Type);//false
特点
创建子类的时候可以向父类传递参数。
可以实现多继承。
缺点
子类对象的实例是本身,不是父类。
只能继承父类的构造属性和方法,不能继承原型属性和方法。
不是完全的继承,类似克隆,父类的副本,影响性能。