zoukankan      html  css  js  c++  java
  • javascript组合继承

        javascript继承有几种继承方式,现在来说说其中的组合继承。

        组合继承是结合了原型借用构造函数这两种技术的继承方式,分别利用它们的长处,避免了短处。那就先说说这两种技术吧。

    原型链 

            原型链就是实例与原型之间的链条。

             子类型构造函数    超类型构造函数  之间没有关联,只需将   子类型构造函数的原型  作为  超类型构造函数的实例。这样,子类型构造函数的实例   就可以共享    超类型构造函数原型的方法  以及  超类型构造函数的属性              

      如:

       var subType.prototype = new superType();

             原型链的短处在于:当subType.prototype作为实例时拥有的superType构造函数里的属性,在它作为subType的原型时,这些属性就作为原型的属性被subType的实例共享;还有,因为两个类型的构造函数之间没有关联,在创建subType的实例时,不能向superType构造函数传递参数。

           

      借用构造函数

                 在  子类型构造函数里  调用  超类型构造函数,使用   call()      或   apply()  方法。

    如:

       superType.call(this);   或   superType.call(this,参数);

             通过这样可以将superType构造函数里的属性作为特定的,即subType的实例调用时,这些属性也是特属于每一个实例,而不是共享的。同时,还可以向superType构造函数传递参数。

             然而,定义在superType.prototype里的方法,对subType是不可见的。

             这两个方法都有其所长,也有其所短。所以将它们组合起来,这就有了组合继承。了解了原型链与借用构造函数就不难理解组合继承了。

     组合继承

             组合继承是通过原型链继承原型的方法,通过借用构造函数继承属性。这样就可以将属性与方法分开继承,方法被所有实例共享,而属性则是特属于每一个实例。

    当然,组合继承也有其缺点,那就是超类型的属性被继承了两次,一次是子类型原型继承,另一次是子类型实例继承,只是实例继承的属性屏蔽了原型继承的属性。

        

  • 相关阅读:
    WINDOWS API ——GETFILETIME——获取文件时间
    lua 源码分析之线程对象lua_State
    GPL、BSD、MIT、Mozilla、Apache、LGPL开源协议介绍
    BOOST 线程完全攻略
    宏定义中#和##符号的使用和宏定义展开问题
    weak_ptr<T>智能指针
    轻松记住大端小端的含义(附对大端和小端的解释)
    关于VC预定义常量_WIN32,WIN32,_WIN64
    VC 预定义宏
    php技术之路
  • 原文地址:https://www.cnblogs.com/yezi-dream/p/5469086.html
Copyright © 2011-2022 走看看