JavaScript继承模式粗探
真正意义上来说Javascript并不是一门面向对象的语言,没有提供传统的继承方式,但是它提供了一种原型继承的方式,利用自身提供的原型属性来实现继承。Javascript原型继承是一个被说烂掉了的话题,但是自己对于这个问题一直没有彻底理解,今天花了点时间又看了一遍《Javascript模式》中关于原型实现继承的几种方法,下面来谈谈JS中比较简单的继承方法,如果大家有不同意见,欢迎建议。
最基础的原型链继承在这里就不复述了,主要讲一下其他的继承模式。
1.借用构造函数继承
function Father (name) { this.name=name; } function Son (name) { Father.call(this,name); //在子类型中调用超类型的构造函数 this.age=15; } var me=new Son("Su");
好处:可以为子类型传递参数,如图中的name属性。
坏处:1.方法在构造函数中定义,无法复用。2.超类型原型中定义的方法对子类型是不可见的。
2.组合继承(综合原型链与构造函数)
//超类型构造函数function Father (name) { this.name=name; this.famMember=[]; }//超类型构造函数原型方法 Father.prototype.sayName=function () { alert(this.name); }//子类型构造函数 function Son (name,age) { Father.call(this,name); //构造函数方法 this.age=age; } Son.prototype=new Father(); //重写子类型原型对象 Son.prototype.constructor=Son; //重写构造函数属性指向子类型 Son.prototype.sayAge=function () { alert(this.age); } //重写原型对象后再加入方法 var me=new Son("Su",15); me.famMember.push("dad","mom"); //子类型可以调用超类型构造函数内的方法var he=new Son("Li",14);alert(he.famMember); // []
好处:不同的子类既可以拥有自己的属性,也可以使用相同的方法。
坏处:这种方法需要调用2次超类型的构造函数,同名的属性方法会被覆盖一次。
3.原型式继承 (类似Object.create())
function object (o) { function F () {} F.prototype=o; return new F(); }var obj={}; //将obj对象传入作为新对象的原型。var me=object(obj);
使用这种方法继承需要有一个对象作为原型对象,所以所有继承其的子类型的属性方法都是共用的。
ES5通过新增Object.creatr()方法规范了原型式继承。
4.寄生式继承 (可以设置私有方法的原型式继承)
function object (o) { function F () {} F.prototype=o; return new F(); } var obj={}; //将obj对象传入作为新对象的原型。到这里都与原型式继承相同function creObj(o) { var clone=object(obj); clone.sayHi=function () { alert("Hi"); };return clone; } var me=creObj(obj);
好处:这种方式弥补了原型式继承只有公有属性方法的缺陷,使子类型能有私有属性方法。
5.寄生组合式继承
function inherit (father,son) { var pro=Object(father.prototype); //创建超类型原型对象的副本 pro.constructor=son; son.prototype=pro; //将副本作为子类型的原型对象 }
本方法用于弥补组合继承中属性方法覆盖的问题。
用上图代码代替组合继承中 Son.prototype=new Father(); 这段代码。这样只需调用一次父类型的构造函数,避免了创造多余不必要的属性方法,并且保持了原型链不改变,是一种理想的引用类型继承方法。
关于js继承模式先粗略给大家介绍这么多,相信对大家有所帮助,更多信息请继续关注脚本之家网站。
相关文章
- 本篇文章主要分享了通过window.navigator来判断浏览器及其版本信息的实例代码。具有一定的参考价值,下面跟着小编一起来看下吧...2017-01-23
- 这篇文章主要介绍了js如何实现浏览器打印功能,文中示例代码非常详细,帮助大家更好的理解和学习,感兴趣的朋友可以了解下...2020-07-15
- 下面小编就为大家带来一篇利用JS实现点击按钮后图片自动切换的简单方法。小编觉得挺不错的,现在就分享给大家,也给大家做个参考。一起跟随小编过来看看吧...2016-10-25
- 作为前端,一直以来都知道HTTP劫持与XSS跨站脚本、CSRF跨站请求伪造。防御这些劫持最好的方法是从后端入手,前端能做的太少。而且由于源码的暴露,攻击者很容易绕过防御手段。但这不代表我们去了解这块的相关知识是没意义的,本文的许多方法,用在其他方面也是大有作用。...2021-05-24
- 那么今天我就用JavaScript代码来实现这个效果吧,那么首先介绍一下整个的思路,首先我们先将确定输入密码的位数,我的需求是5位,那么就用一个div标签包住5个input标签...2016-01-02
- 这篇文章主要给大家介绍了关于Nest.js参数校验和自定义返回数据格式的相关资料,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧...2021-03-28
- 这篇文章主要为大家详细介绍了js实现上传图片及时预览的相关资料,具有一定的参考价值,感兴趣的朋友可以参考一下...2016-05-09
- 这篇文章主要为大家详细介绍了js+css实现回到顶部按钮back to top回到顶部按钮,感兴趣的小伙伴们可以参考一下...2016-03-03
- 这篇文章主要给大家介绍了一个关于JS正则匹配的踩坑记录,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧...2021-04-13
- 这篇文章主要介绍了如何使用JavaScript实现“无缝滚动 自动播放”轮播图效果,本文通过实例代码给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下...2020-08-20
- 这篇文章主要介绍了js实现调用网络摄像头及常见错误处理,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧...2021-03-07
- 这篇文章主要为大家详细介绍了JS实现随机生成验证码,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下...2021-09-06
- 这篇文章主要介绍了js组件SlotMachine实现图片切换效果制作抽奖系统的相关资料,需要的朋友可以参考下...2016-04-19
- 有时候我们需要屏蔽客户端的F12,以防菜鸟也可以随意修改我们的代码,也处于源码的保护等操作,这里就为大家分享一下常见的代码...2020-10-03
- 这篇文章主要为大家详细介绍了js实现列表按字母排序,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下...2020-08-11
- 这篇文章主要介绍了基于JavaScript实现文字超出部分隐藏 的相关资料,需要的朋友可以参考下...2016-03-01
- 这篇文章主要介绍了JS创建Tag标签的方法,结合具体实例形式分析了javascript动态操作页面HTML元素实现tag标签功能的步骤与相关操作技巧,需要的朋友可以参考下...2017-06-15
- Vue.js通过简洁的API提供高效的数据绑定和灵活的组件系统.这篇文章主要介绍了vue.js 表格分页ajax 异步加载数据的相关资料,需要的朋友可以参考下...2016-10-20
- 这次文章要给大家介绍的是node.JS md5加密中文与php结果不一致怎么办,不知道具体解决办法的下面跟小编一起来看看。 因项目需要,需要Node.js与PHP做接口调用,发现nod...2017-07-06
- 为了网站的安全性,很多朋友都把密码设的比较复杂,但是如何密码不能明显示,不知道输的是对是错,为了安全起见可以把密码显示的,那么基于js代码如何实现的呢?下面通过本文给大家介绍JavaScript实现表单密码的隐藏和显示,需要的朋友参考下...2016-03-03