你們好,js繼承是js中比較重要的的一部分,這篇文章來介紹js中的繼承。segmentfault
js繼承有挺多變種,經常使用就這三種app
講繼承前,先講講new實例化過程當中,在內存中的三個階段函數
// 實例化 function Foo(){} var _f = new Foo(); // 內存中三個階段 // 1)建立對象 var _f = {}; // 2)更改 __proto__指向 _f.__proto__ = Foo.prototype; // 3)更改this指向 Foo.call(_f);
這是內存中實例化的三個階段,除了第一步建立對象,我們能夠看出,實例化對象,本質上仍是在操做prototype
和this
學習
理解了內存的三個階段,就能很好理解繼承了,this
繼承本質上也是在操做prototype
和this
prototype
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
和繼承的實際應用,繼承的簡單原理就說到這裏了,有啥錯漏的歡迎評論指出,共同窗習