原型鏈的繼承就是將子類的PRototype.__proto__
鏈接到父類的prototype
,借此完成原型鏈
實例化的對象沒有prototype
,prototype
是函數特有的屬性,所有的對象都有__proto__
, 這是指向實例化這個對象的類的prototype
,所有對象的原型鏈最后是null
下面是經典的原型鏈繼承的例子,我借此解釋一下
function extend(Child, Parent) { var F = function(){}; //將父類的prototype復制到F函數中 F.prototype = Parent.prototype; /*new F()實例化F()實際的作用是生成了一個下面這個對象 { __proto__: { //Parent.prototype } } 這樣就完成了 Child.prototype.__proto__ = Parent.prototype這個原型鏈繼承的核心內容 */ Child.prototype = new F(); //Parent.prototype的constructor是Parent,為了準確這里要手動將Child.prototype.constructor改為Child Child.prototype.constructor = Child; //這里是為了代碼實際開發時方便調用父類,不用使用__proto__ Child.uber = Parent.prototype; }涉及到繼承這一塊,javascript 只有一種結構,那就是:對象。在 Javascript 中,每個對象都有一個指向它的原型(prototype)對象的內部鏈接。這個原型對象又有自己的原型,直到某個對象的原型為 null 為止(也就是不再有原型指向),組成這條鏈的最后一環。這種一級一級的鏈結構就稱為原型鏈(prototype chain)。—MDN原型鏈描述
上面這句話有些長,看代碼獲取會直觀一點
childClass.prototype.__proto__ == parantClass.prototypechildInstance.__proto__ == childClass.prototypechildInstance.__proto__.__proto__ == childClass.prototype.__proto__ == parantClass.prototype對于這里的childInstance.__proto__ == childClass.prototype
,是由關鍵字new
實現的,具體可以看我的另外一篇文章new到底做了什么
參考文獻 Javascript繼承機制的設計思想 Javascript面向對象編程(二):構造函數的繼承 繼承與原型鏈
新聞熱點
疑難解答