1.原型链继承
特点:只能单个继承,父类新增的原型方法或属性子类都能访问。
//定义一个父类
function Animal(){
this.name=null;
this.age=null;
this.sex=null;
this.eat=function(){
return this.name+"想吃肉"
}
}
//定义一个子类
function dog(){};
//将父类实例化
var a=new Animal();
dog.prototype=a;//子类继承父类;
var d=new dog();
d.name="小狗";
d.age="2岁";
d.sex="女孩子";
console.log(d);
2.构造继承
特点:多个继承, 父类的实例复制给子类
//先定义一个父类
function Animal(name,age,sex){//用参数来表示其属性或者行为
this.name=name;
this.age=age;
this.sex=sex;
this.sleep=function(){
return this.name+"打瞌睡";
}
}
//另一个父类
function eat(name){
this.name=name;
this.food=function(){
return this.name+"吃肉"
}
}
//定义一个子类
function dog(name,age,sex){
//call或apply继承;
//call:序列传参;apply:数组传参;
//Animal.call(this,name,age,sex);
Animal.apply(this,[name,age,sex]);
eat.call(this,name);//多个继承
}
var d=new dog("小狗","两岁","女孩子");//给参数赋值
console.log(d);
console.log(d instanceof Animal);//false;
console.log(d.food());
3.实例继承
/*先去定义一个父类对象*/
function Animal(){
/*动物类有什么特征和行为*/
this.name=null;
this.sex=null;
this.age=null;
this.sleep=function (){
return this.name+"会睡觉";
}
}
Animal.prototype.speed=function(){
return 5;
}
//定义一个子类
function dog(){
var a=new Animal();
a.name="小狗";
return a;
}
var d=new dog();
console.log(d);
console.log(d.speed());//5
console.log(d instanceof dog);//false
console.log(d instanceof Animal);//ture