Javascript玩转继承(三)
来源: 阅读:837 次 日期:2014-05-09 14:31:22
温馨提示: 小编为您整理了“Javascript玩转继承(三)”,方便广大网友查阅!

首先,我们来看非主流继承一:实例继承法。

我也不说那么多废话了,既然是非主流继承,就一定不常用,既然不常用还存在,那就只有一个因素,他用于特定的场合。实例继承法,就主要用于核心对象的继承,也是目前为止唯一能够解决核心对象继承的方式。

核心对象的继承拥有一定的价值,比如说Error对象,我们公司可能要自己实现一个Error 类来简化今后的开发,那么这个时候我就要使用实例继承法来继承Error。

代码如下:

function ExtendingError(mes)

{

var instance=new Error(mes);

instance.NewError=function(){

alert("Your Error is "+mes);

}

return instance;

}

好,测试下:

代码如下:

var e=new ExtendingError("Your number is less than one");

e.NewError();

alert(e.toString());

结果让我们满意:

1.jpg

好,废话不多说,这个是非主流继承方式,基本只用于核心对象的继承,记住就好!

接下来看看非主流继承二:拷贝继承法.

顾名思义,拷贝继承,就是通过拷贝实现对象的继承,拷贝什么呢?很明显,就是对象的属性和方法,还记得Javascript中,类其实就一个Hashtable么?如果想不起来的话,就回去复习一下基础,我可能会在过一段时间写一篇关于Javascript对象的知识。

了解了这个就好办了,直接看代码:

首先写一个Extend方法:

代码如下:

Function.prototype.Extend=function(){

for(var pro in obj)

{

//这样其实就是把父类的属性和方法完全复制过去了

this.prototype[pro]=obj[pro];

}

}

好了,再写段代码看下如何使用:

代码如下:

function Animal()

{ }

function People()

{ }

People.Extend(new Animal())

{ }

明眼人一眼看出来,这个方法的缺点太明显了:

将对象的属性方法一一复制的时候,其实用的是反射,反射对效率的损伤我就不多说了。

和原型继承一样,必须初始化父类对象,当确定继承关系时,但是参数还不确定时,玩不转!

总之,这个方法一般情况下不用。

好了,下面说个常用的东西。混合继承!

这个是基于两个主流继承方式的。对比两个继承方式,我们可以发现两个继承方式的优缺点是互补的,那就好办了,混合到一起吧!

代码如下:

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();

2.jpg

测试通过!

这是一个相对完美的解决方案,但是却增加了代码的复杂度,所以具体的方案还要靠大家在实践中去选择。

Javascript玩转继承的方式就这些,欢迎大家继续关注我的其他文章。

更多信息请查看IT技术专栏

更多信息请查看网络编程
手机网站地址:Javascript玩转继承(三)
由于各方面情况的不断调整与变化, 提供的所有考试信息和咨询回复仅供参考,敬请考生以权威部门公布的正式信息和咨询为准!
关于我们 | 联系我们 | 人才招聘 | 网站声明 | 网站帮助 | 非正式的简要咨询 | 简要咨询须知 | 加入群交流 | 手机站点 | 投诉建议
工业和信息化部备案号:滇ICP备2023014141号-1 云南省教育厅备案号:云教ICP备0901021 滇公网安备53010202001879号 人力资源服务许可证:(云)人服证字(2023)第0102001523号
云南网警备案专用图标
联系电话:0871-65317125(9:00—18:00) 获取招聘考试信息及咨询关注公众号:hfpxwx
咨询QQ:526150442(9:00—18:00)版权所有:
云南网警报警专用图标
Baidu
map