本文小编为大家详细介绍“javascript继承实现的方式有哪些”,内容详细,步骤清晰,细节处理妥当,希望这篇“javascript继承实现的方式有哪些”文章能帮助大家解决疑惑,下面跟着小编的思路慢慢深入,一起来学习新知识吧。用官方点的话讲继承是面向对象三大特征之一,可以使得子类具有父类的属性和方法,同时还可以在子类中重新定义以及追加属性和方法。通俗的来说继承就是子类可以从父类那里复用一些属性和方法,从而达到复用代码的一个效果。原型链继承构造函数继承组合继承(伪经典继承)原型式继承寄生式继承寄生组合式继承class 类继承所谓的原型链继承,在我的理解就是子类通过原型链来继承到父类的属性,在上面的代码中我们也可以看到在子类实例s
没有继承到父类的属性时,子类去访问父类才有的属性值为:undefined
。在将父类实例对象挂载到子类Student构造函数的原型上面后,那么此时子类的原型上面就有了父类的全部属性。因为Person
的实例对象被显示的挂载到了Student
的原型上面。所以子类在继承之后,所有实例化的子类都拥有了跟父类一样的属性,于是这样子类就通过原型链实现了继承。优点:子类可以继承到父类的方法。缺点:会在子类实例上共享父类所有的引用类型数据,也就是子类的原型被父类属性覆盖。子类实例不能给父类构造函数传参。这样子类实例传的参数就不能给到父类构造函数里面了。构造函数继承就是使用强制改变 this 指向,借用一个构造函数继承。相较于原型链继承,构造函数继承不会共享父类上的引用类型数据,不会互相影响。缺点:1.不能访问到父类原型属性上面的方法和参数,即Person.prototype
上的都不能访问到。相较于原型链继承,构造函数继承好像已经非常完美了,但是它还是存在着一个最大的缺点就是:不能继承到父免费云主机域名类的原型上面的属性。但是原型链继承就好像没有这个问题,如果将这两个继承方式组合起来搭配使用是不是就能解决掉所有问题,于是这就有了组合继承。上面先在子类内使用构造函数继承将父类的显示属性挂载到子类上面,此时仍然存在着构造函数继承中子类不能访问到父类原型上面属性的缺点。所以下面配合原型链继承将父类实例挂载到子类的原型上,此时子类就可以访问父类的原型上的属性,同时构造函数继承将子类的原型被父类属性覆盖的问题解决。组合继承将前面两种继承的缺点都补全了,但是它也有缺点:不足:重复调用两次父类函数。通过在一个构造函数的原型上挂载父类,此时再将这个挂载了父类的构造函数实例返回出来,那么这个实例的隐式原型就为这个父类,所以此时子类实例对象可以访问到父类上的属性,这就是原型式继承。这个看起来跟理解起来是不是跟原型链继承很像,也挺好理解的。缺点:如果父类属性有引用类型,那么这个引用类型也会被共享出来。实例化两个不同的对象,更改r2的sports属性,结果r1的sports属性也被修改。这种继承方式跟原型式继承有着异曲同工之妙,只不过可以增强这个父类。其存在的缺点也与原型式继承一样。这个是一个比较完美的继承方式,使用组合继承与寄生继承。这种继承方式结合了组合继承,借助一个空的构造函数,将父类的原型挂载到这个空的构造函数上面,然后将其附在子类的原型上面,这样就解决了组合式继承的缺点。Class 可以通过extends
关键字实现继承,让子类继承父类的属性和方法。读到这里,这篇“javascript继承实现的方式有哪些”文章已经介绍完毕,想要掌握这篇文章的知识点还需要大家自己动手实践使用过才能领会,如果想了解更多相关内容的文章,欢迎关注百云主机行业资讯频道。
相关推荐: Laravel操作session和cookie的方法是什么
本篇内容主要讲解“Laravel操作session和cookie的方法是什么”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“Laravel操作session和cookie的方法是什么”吧!Session 的配置文件存…
免责声明:本站发布的图片视频文字,以转载和分享为主,文章观点不代表本站立场,本站不承担相关法律责任;如果涉及侵权请联系邮箱:360163164@qq.com举报,并提供相关证据,经查实将立刻删除涉嫌侵权内容。