js繼承

K戰神發表於2018-01-08

物件導向:

  私有屬性、私有方法、特權方法、靜態方法、靜態屬性、公共屬性、公共方法、繼承、閉包

閉包:有權訪問 另一個函式作用域中的變數 的函式

    因為鏈式作用域問題,父級可以訪問子級方法內部的變數,

    將子級函式作為返回值

 

繼承:

  類式繼承:

       父類的例項賦值給子類的原型。

       例項化父類,同時建立了父類原型,將子類原型指向宣告的父類,此時子類原型可以訪問父類以及父類原型。

       建構函式繼承:

       在子類的建構函式作用域中執行父類的建構函式

       子類中宣告新增此句 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 對繼承已經做了封裝,思想共統一。

       

       

 

相關文章