源码网商城,靠谱的源码在线交易网站 我的订单 购物车 帮助

源码网商城

Javascript玩转继承(三)

  • 时间:2020-03-22 19:58 编辑: 来源: 阅读:
  • 扫一扫,手机访问
摘要:Javascript玩转继承(三)
首先,我们来看非主流继承一:实例继承法。 我也不说那么多废话了,既然是非主流继承,就一定不常用,既然不常用还存在,那就只有一个因素,他用于特定的场合。实例继承法,就主要用于核心对象的继承,也是目前为止唯一能够解决核心对象继承的方式。 核心对象的继承拥有一定的价值,比如说Error对象,我们公司可能要自己实现一个Error 类来简化今后的开发,那么这个时候我就要使用实例继承法来继承Error。 代码如下:
[u]复制代码[/u] 代码如下:
function ExtendingError(mes) {     var instance=new Error(mes);     instance.NewError=function(){         alert("Your Error is "+mes);        }     return instance; }
好,测试下:
[u]复制代码[/u] 代码如下:
var e=new ExtendingError("Your number is less than one"); e.NewError(); alert(e.toString());
结果让我们满意: [img]http://files.jb51.net/file_images/article/201405/2014050818081912.png[/img] [img]http://files.jb51.net/file_images/article/201405/2014050818081913.png[/img] 好,废话不多说,这个是非主流继承方式,基本只用于核心对象的继承,记住就好! 接下来看看非主流继承二:拷贝继承法. 顾名思义,拷贝继承,就是通过拷贝实现对象的继承,拷贝什么呢?很明显,就是对象的属性和方法,还记得Javascript中,类其实就一个Hashtable么?如果想不起来的话,就回去复习一下基础,我可能会在过一段时间写一篇关于Javascript对象的知识。 了解了这个就好办了,直接看代码: 首先写一个Extend方法:
[u]复制代码[/u] 代码如下:
Function.prototype.Extend=function(){     for(var pro in obj)     {         //这样其实就是把父类的属性和方法完全复制过去了         this.prototype[pro]=obj[pro]; } }
好了,再写段代码看下如何使用:
[u]复制代码[/u] 代码如下:
function Animal() {    } function People() {    } People.Extend(new Animal()) {    }
明眼人一眼看出来,这个方法的缺点太明显了: 将对象的属性方法一一复制的时候,其实用的是反射,反射对效率的损伤我就不多说了。 和原型继承一样,必须初始化父类对象,当确定继承关系时,但是参数还不确定时,玩不转! 总之,这个方法一般情况下不用。 好了,下面说个常用的东西。混合继承! 这个是基于两个主流继承方式的。对比两个继承方式,我们可以发现两个继承方式的优缺点是互补的,那就好办了,混合到一起吧!
[u]复制代码[/u] 代码如下:
function People(name) {     this.name=name;     this.SayName=function(){         alert("My name is "+name); } } function Girl(name,age) {     //构造继承     this.father=People;     this.father(name);     delete this.father;     this.Introduce=function(){         alert("My name is "+name+".I am"+age); } } //原型继承 Girl.prototype=new People(); 好了,两种方式的混合,现在看看,是不是问题解决了呢? var g=new Girl("Xuan",22); alert(g instanceof People); g.SayName(); g.Introduce();
[img]http://files.jb51.net/file_images/article/201405/2014050818081914.png[/img] [img]http://files.jb51.net/file_images/article/201405/2014050818081915.png[/img] [img]http://files.jb51.net/file_images/article/201405/2014050818081916.png[/img] 测试通过! 这是一个相对完美的解决方案,但是却增加了代码的复杂度,所以具体的方案还要靠大家在实践中去选择。 Javascript玩转继承的方式就这些,欢迎大家继续关注我的其他文章。 
  • 全部评论(0)
联系客服
客服电话:
400-000-3129
微信版

扫一扫进微信版
返回顶部