js三種繼承

你們好,js繼承是js中比較重要的的一部分,這篇文章來介紹js中的繼承。segmentfault

經常使用的三種繼承

  • 構造函數繼承
  • call & apply 繼承
  • prototype繼承

js繼承有挺多變種,經常使用就這三種app

講繼承前,先講講new實例化過程當中,在內存中的三個階段函數

new實例化,在內存中的三個階段

// 實例化
function Foo(){}
var _f = new Foo();
// 內存中三個階段
// 1)建立對象
    var _f = {};
// 2)更改 __proto__指向
    _f.__proto__ = Foo.prototype;
// 3)更改this指向
    Foo.call(_f);

這是內存中實例化的三個階段,除了第一步建立對象,我們能夠看出,實例化對象,本質上仍是在操做prototypethis學習

理解了內存的三個階段,就能很好理解繼承了,this

繼承本質上也是在操做prototypethisprototype

js繼承簡單總結

function Axx( ){ this.a = 1; }
Axx.prototype.foo = function (){ };

//   一、原型繼承 ( prototype繼承的核心,就是原型鏈 )
   Bxx.prototype = new Axx();

//    二、構造函數繼承 - 在子類函數中用一個屬性指向父類 這樣就繼承了原型上方法
    function Children() {
       this.obj = ParentFn; // 這樣繼承了ParentFn 原形上方法 (注意不能加括號,那是把父類執行結果給子類了)
        this.obj(); // 這樣繼承了ParentFn this上方法
   }


//   三、call和apply繼承
   function Bxx(){
       Axx.call(this);
    }

   new Bxx(); // 這樣就繼承了

上面就是簡單實現繼承了,是否是很簡單呢😄!code

原型鏈我上一篇文章講了,這裏就不在贅述;原型鏈看這對象

再來總結下,js繼承的核心,繼承

就是this指向的改變,擴展了子類的this指向,使之包含了父類的this內存

繼承總結

就兩點,繼承prototype原型上共有方法 和this上私有方法,搞清楚了這點,學習繼承就不難了,

基本理論也說完了,以後我看出幾篇prototype和繼承的實際應用,繼承的簡單原理就說到這裏了,有啥錯漏的歡迎評論指出,共同窗習

相關文章
相關標籤/搜索