zoukankan      html  css  js  c++  java
  • Atitit.实现继承的原理and方法java javascript .net c# php ...

    Atitit.实现继承的原理and方法java javascript .net c# php ...

    1. 实现继承的问题 1

    2. 如何拷贝基类方法?采用prototype原型方式,通过冒充对象 1

    3. 2.属性如何继承? 2

    4. 几种继承方式的比较    2

    5. 常用的apply ,call方法 3

    6. 参考 3

    1. 实现继承的问题


    JavaScript中要实现继承,其实就是实现三层含义:
    1、子类的实例可以共享父类的方法;
    2、子类可以覆盖父类的方法或者扩展新的方法;
    3、子类和父类都是子类实例的类型

    要解决两个问题:1.如何拷贝基类方法?2.属性如何继承? 


    JavaScript中,并不直接从语法上支持继承,但是可以通过模拟的方法来实现继承,以下是关于实现继承的几种方法的总结:
    1、构造继承法
    2、原型继承法
    3、实例继承法
    4、拷贝继承法

    作者:: 老哇的爪子 Attilax 艾龙,  EMAIL:1466519819@qq.com

    转载请注明来源: http://blog.csdn.net/attilax

    2. 如何拷贝基类方法?采用prototype原型方式,通过冒充对象

    1.对于问题1,一般采用prototype原型方式,通过冒充对象。

     /*更改Member的prototype属性,以实现继承*/

    09

         Member.prototype=new User();

    2.拷贝基类方法代码

    1

    Member.prototype=new User();

      此行代码的含义是new 一个User对象,将此引用传递给Member的原型,这样完成了基类方法的拷贝工作。(备注:此处代码一定要先执行,然后再添加新的方法)。

    3. 2.属性如何继承?

    对于问题2,一般采用调用基类构造函数 

     /*初始化基类参数*/

    06

             User.call(this,userid,uname,uage,uscore);

    1.调用基类构造函数代码

    1

    User.call(this,userid,uname,uage,uscore);

    此行代码的含义是执行User类的构造函数,并且将Member的this指针域传递给User类,此时User类运行构造函数时,this指向的是Member对象。

    4. 几种继承方式的比较 
      

    From JavaScript中继承的实现方法 - xieex - 博客园.htm

    比较项

    构造继承

    原型继承

    实例继承

    拷贝继承

    静态属性继承

    N

    Y

    Y

    Y

    内置(核心)对象继承

    N

    部分

    Y

    Y

    多参多重继承

    Y

    N

    Y

    N

    执行效率

    多继承

    Y

    N

    N

    Y

    instanceof

    false

    true

    false

    false

    5. 常用的apply ,call方法

    每种方法都有其适用环境,比如,如果父类带有有参构造函数:这种情况下,prototype就不适用了,可选用apply或call;

     在apply和call中,又该如何取舍呢?在OO的继承中,子类继承于父类,那么它应该也是父类的类型。即,ChildClassByCall、ChildClassByApply应该也是ParentClass类型,但我们用"instanceof"检测一下就会发现,通过apply继承的子类,并非ParentClass类型。所以,我们建议用call + prototype 来模拟实现继承。据说,Google Map API 的继承就是使用这种方式哟。

    apply 实现

    参考::JavaScript继承的模拟实现 - 牦牛 - 博客园.htm

    6. 参考

    javascript实现类、继承、多态(原创) _ 耕书录.htm

    JavaScript中继承的实现方法 - xieex - 博客园.htm

    我要啦免费统计
  • 相关阅读:
    网页加载进度条
    BFC
    Java — 基础语法
    Python — 多进程
    Python — 进程和线程
    Python — 面向对象进阶2
    Python — 面向对象编程基础
    Linnux 05
    Linnux 04
    Linnux 03
  • 原文地址:https://www.cnblogs.com/attilax/p/5963856.html
Copyright © 2011-2022 走看看