当前位置: 首页 > 科技观察

JS实现继承的方式有哪些?

时间:2023-03-12 11:53:42 科技观察

继承的含义:继承是面向对象编程中的一个重要概念。通过继承,子类的实例可以拥有在父类中定义的属性和方法。1、原型链继承functionUserBase(){}functionUser(){}User.prototype=newUserBase();父类的实例用作子类的原型。(1)不能给构造函数传递参数,无法实现多重继承(2)来自原型对象的引用属性为所有实例共享。构造函数被复制到子类。functionUserBase(){}functionUser(userName){UserBase.call(this);this.userName=userName;}letuser=newUser("鬼鬼")user.userName;优点:(1)可以给构造函数传递参数(2)可以实现多重继承和多重调用。几个缺点:(1)不能实现函数复用(2)只能继承父类的属性和方法,不能继承父类的原型3.实例继承为父类实例增加新的属性,返回为a子类实例。functionUserBase(){}functionUser(userName){letuserBase=newUserBase();userBase.userName=userName;returnuserBase;}letuser=newUser("鬼鬼")user.userName;缺点:无法实现多重继承4.复制继承){User.prototype[attr]=userBase[attr];}this.userName=userName;}letuser=newUser("鬼鬼")user.showInfo();优点:支持多重继承缺点:内存占用高,因为forin循环用于复制父类属性/方法不可枚举方法不可复制5.组合继承通过调用父类构造函数继承父类的属性,并保留了传递参数的优点。然后将父类实例作为子类原型,实现功能复用。functionUserBase(userName){this.userName=userName}UserBase.prototype.showInfo=function(){console.log(this.userName)}functionUser(userName){//调用方法UserBase.call(this,userName)//apply方法UserBase.apply(this,[userName])}User.prototype=newUserBase()letuser=newUser("鬼鬼")user.showInfo();优点:(1)继承了父类的属性和方法,也继承了父类的原型(2)可以传递参数,函数可以复用缺点:父类的构造函数被调用了两次,不会两次初始化实例方法,避免了组合继承的缺点(this,userName)}User.prototype=Object.create(UserBase.prototype)User.prototype.constructor=Userletuser=newUser("鬼鬼")user.showInfo();7.类继承classUserBase{constructor(userName){this.userName=userName}showInfo(){console.log(this.userName)}}classUserextendsUserBase{constructor(value){super(value)}}varuser=newUser("鬼鬼")user.showInfo();参考https://blog.csdn.net/guoqing2016/article/details/106418081/http://www.bubuko.com/infodetail-2556919.html本文转载自微信公众号“前端达人”,转载文章可通过以下二维码关注,转载请联系前端人们公众号。