function Animal(name,weight){
this.name=name;
this.weight=weight;
};
Animal.prototype.eat=function(){
console.log("我是Animal构造函数的eat方法")
};
function Dog(color){
this.color=color
};
Dog.prototype=new Animal("哮天犬","50kg"); //原理:通过改变原型指向实现继承,优缺点:可以很好的继承方法(如这里的eat方法),但不能很好的继承属性(如这里的name,weight,color)
let smallDog=new Dog("黑色");
smallDog.eat();
function Animal(name,weight){
this.name=name;
this.weight=weight;
};
Animal.prototype.eat=function(){
console.log("我是Animal构造函数的eat方法")
}
function Dog(color,name,weight){ //这里也需要传入借用的构造函数里的属性,这里指Animal构造函数的属性也要传入
this.color=color;
Animal.call(this,name,weight); //借用构造函数继承,需要使用到call语法。优缺点:可以很好的继承属性(如name,weight,color),但不能很好地继承方法(如eat)
//借用构造函数格式:借用构造函数:构造函数名字.call(当前对象,属性,属性,属性....);
}
let smallDog=new Dog("哮天犬","50kg","黑色");
console.log(smallDog.name,smallDog.weight,smallDog.color);
smallDog.eat(); //这句代码会报错,因为借用构造函数继承并没有继承到Animal构造函数的eat方法,故不能调用
function Animal(name,weight){
this.name=name;
this.weight=weight;
};
Animal.prototype.eat=function(){
console.log("我是Animal构造函数的eat方法")
}
function Dog(color,name,weight){
this.color=color;
Animal.call(this,name,weight); //借用构造函数继承
}
Dog.prototype=new Animal(); //原型继承,**注意,组合继承的话这里不需要传值,因为这里的原型继承是用来继承方法的,不用考虑属性**
let smallDog=new Dog("哮天犬","50kg","黑色");
console.log(smallDog.name,smallDog.weight,smallDog.color); //通过"借用构造函数继承"继承了属性
smallDog.eat(); //通过"原型继承"继承了方法
原文:https://www.cnblogs.com/huihuihero/p/11310728.html