美文网首页
javascript高级程序设计读书笔记(六)

javascript高级程序设计读书笔记(六)

作者: youngiyang_打码少年 | 来源:发表于2016-09-08 13:49 被阅读15次

    继承

    NO.1 原型链

    基本思想是让一个引用类型继承另一个引用类型的属性和方法。所以原型链是用来实现继承的主要方法。

    继承的实现主要原理,其实本质方法是重写原型对象。例如:
    假设要B继承A的所有属性和方法。
    首先定义一个构造函数A和构造函数B
    然后:
    B.prototype = new A()
    var aa = new B()
    这样一来aa就继承了对象A的所有方法和属性。
    注意:所有的函数默认原型都是Object实例,所以构造函数A也继承了Object的所有方法和属性。

    NO.2 重写超类型中的方法:


    值得注意的是,在通过原型链实现继承时,不能使用对象字面量创建原型方法。因为这样写就会重写原型链。

    以上的例子存在一个问题就是:通过以上函数创建的对象属性都是共享的,且都是原型对象中的属性,这样一来, 只要有一个对象实例改变了属性,其他的对象实例都会发生改变。所以需要用到借用构造函数方式:


    NO.3 组合继承

    简单来说,就是用构造函数的方式继承所有属性,然后方法自己通过原型对象来创建。代码如下:



    NO.4 原型式继承

    通俗来讲,就是借助原型可以基于已有的对象创建新对象,同时还不必因此创建自定义类型。如下:

    function object(o){
        function F(){}
        F.prototype = o ;
        return new F();
    }
    ```
    主要原理也是重写构造函数的原型。在函数内部,临时新建一个构造函数,然后重写构造函数的原型(将传入的对象赋值进去),然后返回这个构造函数的新实例。
    
    ![](https://img.haomeiwen.com/i627120/9289fb2be2dea1d9.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)
    
    Object.create(),在传入一个参数的情况下,和object()方法的行为相同。
    
    在传入2个参数的情况下,后面的那个参数代表属性,如果和原型对象属性重名,会覆盖原型对象里的属性
    
    ####NO.6 寄生式继承
    ![](https://img.haomeiwen.com/i627120/86a8068a2c900ecb.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)
    ![](https://img.haomeiwen.com/i627120/576269860af3deba.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)
    
    
    ####NO.7寄生组合式继承
    寄生组合式继承基本模式如下:
    ![](https://img.haomeiwen.com/i627120/18ce4b2740724ab2.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)
    实例:
    ![](https://img.haomeiwen.com/i627120/02d26387cf321986.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)

    相关文章

      网友评论

          本文标题:javascript高级程序设计读书笔记(六)

          本文链接:https://www.haomeiwen.com/subject/pomsettx.html