首页 > 其他 > 详细

继承的几种方式

时间:2019-08-06 18:14:42      阅读:62      评论:0      收藏:0      [点我收藏+]

js继承的几种方式:原型继承,借用构造函数继承,组合继承(原型继承+借用构造函数继承),拷贝继承

原型继承

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

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!