在前两篇文章中,介绍了构造继承和原型继承。今天把剩下的两种写完,这两种的应用相对于前两种来说应用很少,因此称为是非主流继承方式。

首先,来看非主流继承一:实例继承法。
我也不说那么多废话了,既然是非主流继承,就一定不常用,既然不常用还存在,那就只有一个因素,他用于特定的场合。实例继承法,就主要用于核心对象的继承,也是目前为止唯一能够解决核心对象继承的方式。
核心对象的继承拥有一定的价值,比如说Error对象,我们公司可能要自己实现一个Error 类来简化今后的开发,那么这个时候我就要使用实例继承法来继承Error。
代码如下:

function ExtendingError(mes)
{
var instance=new Error(mes);
instance.NewError=function(){
alert("Your Error is "+mes);
} www.jbxue.com
return instance;
}

好,测试下:

var e=new ExtendingError("Your number is less than one");
e.NewError();
alert(e.toString());

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

接下来看看非主流继承二:拷贝继承法.
顾名思义,拷贝继承,就是通过拷贝实现对象的继承,拷贝什么呢?很明显,就是对象的属性和方法,还记得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);
} www.jbxue.com
}
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();

测试通过!

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

最新文章

  1. URL无法显示某些特殊符号
  2. .Net下几个服务框架介绍
  3. LeetCode Add Strings
  4. Java提高篇(三六)-----Java集合细节(二):asList的缺陷
  5. 让Windows Server 2008 + IIS 7+ ASP.NET 支持10万并发请求
  6. hdu 5718 Oracle 高精度
  7. jquerymobile,手机端click无效
  8. Power Strings - POJ 2406(求循环节)
  9. 分析linux下的编译环境
  10. Qt5位置相关函数异同详解(附源码)
  11. LeetCode之Max Points on a Line Total
  12. SOFA 源码分析 — 预热权重
  13. Dynamics 365-CRM又报看不懂的错误了
  14. spark MLlib实现的基于朴素贝叶斯(NaiveBayes)的中文文本自动分类
  15. 不熟,不会,未a的题列表
  16. 吴裕雄 python深度学习与实践(5)
  17. 使用vmware安装ubuntu不能上网
  18. 1-9-假期训练心得(dp+bfs)
  19. [转]Maven之(七)pom.xml配置文件详解
  20. 2460: [BeiJing2011]元素

热门文章

  1. YII插件
  2. C++使用hiredis连接带密码的redis服务
  3. ThinkPHP的A方法,R方法,M方法,D方法区别
  4. 设置TreeView背景色
  5. openerp发送给群组信息
  6. Android Bitmap与String互转(转)
  7. [Unity-1] Unity简单介绍
  8. Oracle常用标准表
  9. TabLayout实现顶部导航(一)
  10. HDUOJ----2063过山车