1.原型链继承->将父类的实例作为子类的原型
父类
function Animal(name)
{
this.name=name||"simple";
this.sleep=function()
{
console.log(this.name + '正在睡觉!');
}
}
//原型方法
Animal.prototype.eat=function(food)
{
console.log(this.name+"eat"+food)
}
//原型链继承
function Cat(){}
Cat.prototype=new Animal();
Cat.prototype.name="cat";
var cat=new Cat()
console.log(cat.name) //cat
cat.eat('fish'); //cateatafish
cat.sleep();cat正在睡觉
console.log(cat instanceof Animal); //true
console.log(cat instanceof Cat); //true
2.构造继承->在子类构造函数改变子类构造函数的this指向父类构造函数
function Cat(name)
{
Animal.call(this);
//此时的this就指向父类的this了
//实现了子类继承父类
this.name=name||"simple"
}
//这个实例是子类的实例
/*但是只能继承父类实例的属性和方法,不能继承父类原型的属性和方法*/
3.实例继承
function Cat(name)
{
var instance=new Animal();
instance.name=name||"simple";
return instance;
}
//这个实例是父类的实例
4.组合继承
function Cat(name)
{
Animal.call(this);
this.name=name||"simple";
}
Cat.prototype=new Animal()
//弥补了构造继承的缺陷 现在既可以继承实例的方法,也可以继承原型的方法