JS继承

面向对象:

  私有属性、私有方法、特权方法、静态方法、静态属性、公共属性、公共方法、继承、闭包

闭包:有权访问 另一个函数作用域中的变量 的函数

    因为链式作用域问题,父级可以访问子级方法内部的变量,

    将子级函数作为返回值

 

继承:

  类式继承:

       父类的实例赋值给子类的原型。

       实例化父类,同时创建了父类原型,将子类原型指向声明的父类,此时子类原型可以访问父类以及父类原型。

       构造函数继承:

       在子类的构造函数作用域中执行父类的构造函数

       子类中声明添加此句 Parent.call(this,params);

  组合是继承:

       类式继承+构造函数式继承

                         还是经典的call来调用父类构造函数,将父类重新执行一遍,类似于刷新一遍,这样多个子类实例之间不受引用类型的影响。

  原型式继承:子类声明接收父类的类F,将F的原型指向进来的父类,return new F();

        将父类在子类中封装返回。

        

<script type="text/javascript">
    function inheritObject(o)
    {
        function F(){};
        F.prototype = o;
        return new F();
    }


    var book =
        {
            name: "js book",
            alikeBook: ["css", "book", "html"]
        };
    var newbook = inheritObject(book);
    newbook.name = "newbook";
    newbook.alikeBook.push("newbook book");

    var obook = inheritObject(book);
    obook.name = "obook";
    obook.alikeBook.push("obook book");

    console.log(newbook.name);
    console.log(newbook.alikeBook);

    console.log(obook.name);
    console.log(obook.alikeBook);
  

    console.log(book.name);
    console.log(book.alikeBook);


</script>
View Code

  寄生式继承:是对原型式继承的封装

  寄生组合式继承:写到这,我突然发现,ES6 对继承已经做了封装,思想共统一。

       

       

 

posted @ 2018-01-08 16:57  K战神  阅读(139)  评论(0编辑  收藏  举报