原型式繼承
其原理就是借助原型,可以基於已有的對象創建新對象。節省了創建自定義類型這一步(雖然覺得這樣沒什么意義)。
模型
function object(o){ function W(){ } W.prototype = o; return new W(); }
ES5新增了Object.create()方法規范化了原型式繼承。即調用方法為:Object.create(o);
適用
只想讓一個對象跟另一個對象建立繼承這種關系的時候,可以用Object.create();這個方法,不兼容的時候,則手動添加該方法來兼容。
寄生式繼承
寄生式繼承是原型式繼承的加強版。
模型
function createAnother(origin){ var clone=object(origin); clone.say=function(){ alert('hi') } return clone;
即在產生了這個繼承了父類的對象之后,為這個對象添加一些增強方法。
寄生組合式繼承
實質上,寄生組合繼承是寄生式繼承的加強版。這也是為了避免組合繼承中無可避免地要調用兩次父類構造函數的最佳方案。所以,開發人員普遍認為寄生組合式繼承是引用類型最理想的繼承范式。
基本模式
function inheritPrototype(SubType,SuperType){ var prototype=object(SuperType.prototype); prototype.constructor=subType; subType.prototype=prototype; }
這個object是自定義的一個相當於ES5中Object.create()方法的函數。在兼容性方面可以兩個都寫。
兼容寫法
function object(o){ function W(){ } W.prototype=o; return new W; } function inheritPrototype(SubType,SuperType){ var prototype; if(typeof Object.create==='function'){ prototype=Object.create(SuperType.prototype); }else{ prototype=object.create(SuperType.prototype); }
prototype.constructor=SubType; SubType.prototype=prototype; }