博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
JS中的继承模式
阅读量:6980 次
发布时间:2019-06-27

本文共 1190 字,大约阅读时间需要 3 分钟。

在JS中模拟类
function Parent(name){    this.name=name||'Adam';}Parent.prototype.say=function(){    return this.name}function Child(name){}inherit(Child,Parent)           //Child从Parent中继承继承模式1:function inherit(c,p){    c.prototype=new p()         //将child的原型指向parent的实例}let kid=new Child();kid.say()                       //Adam使用这种模式既继承了原型上的属性,同时也继承了实例的自有属性,且无法设置自己的属性.继承模式2:借用构造器function Child(a,b,c,d){    Parent.apply(this,arguments)}这种方式相当于替换了Parent中的this,并且传递Child的参数进去.此种模式只继承了Parent内部的属性,无法继承Parent.prototype上的属性,Child.prototype依然指向自己.这种模式优点在于复制了父类的属性,不会改写父类属性,安全性提高.缺点是无法继承父类原型上的属性.继承模式3:融合模式此种模式很简单,将以上两种模式融合起来.首先借用父类的构造器,然后将自己的原型指向父类的实例.function Child(){    Parent.apply(this,arguments)}Child.prototype=new Parent();该模式缺点是,构造函数Parent被调用两次,并且自有属性例如name也被继承了两次,因此降低了效率.模式4:共享模式function inherit(C,P){    C.prototype=P.prototype;}和上面一种模式调用两次构造函数不同,该模式一次父级构造函数都不需要调用.由于所有共享成员都应该进入原型对象,所以此种模式清晰明了.缺点在于任何一个子类改变自己的原型,父类原型也会被改变,同时影响所有其他子类.模式5:临时构造模式function inherit(C,P){    let F=function(){}    F.prototype=P.prototype;    C.prototype=new F()}和上一种模式一样,子类也只继承父类原型上的属性和方法.区别是,子类和父类原型并没有直接联系,这样即使改变子类原型属性也不会影响父类原型对象.复制代码

以上几种模式就是最经典的模拟类继承的模式.

转载于:https://juejin.im/post/5b9f748af265da0acd20ae74

你可能感兴趣的文章
什么是MOS ?
查看>>
linux发送email错误 501 Syntax: HELO hostname
查看>>
控制反转 IOC
查看>>
1、Linux汇编——初识汇编
查看>>
javascript json对象转字符串形式
查看>>
从12306网站谈起虚拟主机选购注意事项
查看>>
虚拟内存
查看>>
跨平台抓包软件,可以替代Fiddler
查看>>
iOS Block实现探究
查看>>
nginx虚拟目录配置
查看>>
从"Developer Removed From Sale "回到可下载状态的方法
查看>>
Python:UTF-8编码转换成GBK编码
查看>>
Android监听HOME按键
查看>>
java 解决Html table的rowspan问题(osc处女作)
查看>>
android原生跳转到外网
查看>>
mvc 下的 signalR使用小结
查看>>
各种 django 静态文件的配置总结【待续】
查看>>
渐进符号
查看>>
linux下java进程占用高问题分析过程
查看>>
Eclipse mac 下的快捷键
查看>>