寄生式繼承
寄生式繼承是於原型式繼承緊密相關的一種思路。寄生式基礎的思路與寄生構造函數和工廠模式類似,既創建一個僅用於封裝繼承過程的函數,該函數內部以某種方式來增強對象,最后再像真地是它做了所有工作一樣返回對象。
以下代碼示范了寄生式繼承模式。
function object(o){
function F(){
}
F.prototype=o;
return new F();
};
function createAnother(original){ var clone = object(original); // 通過調用函數創建一個新對象 clone.sayHi = function(){ //以某種方式增強真個對象 alert("hi"); } return clone; //返回這個對象 }
在這個例子中,createAnother() 函數接收一個參數,也就是將要作為新對象基礎的對象。然后把這個對象(original)傳遞給object()函數,將返回的結果賦值給clone。再為其添加一個sayHi方法,最后返回clone對象。
可以像下面這樣使用 createAnother()方法
var person={ name:"Nicholas", friends:["Shelby","Court","Van"] } var now = createAnother(person); now.sayHi(); // hi
通過createAnother() 基於person對象返回的一個新對象------ now ;不僅僅擁有person對象的全部方法和屬性,還擁有自己的sayHi方法;
在主要考慮對象而不是自定義類型和構造函數的情況下,寄生式繼承也是一種有用的模式。前面示范繼承模式時使用的object()函數不是必需的;任何能夠返回新對象的函數都適用於此模式。
注意:使用寄生式繼承方式來為對象添加函數,由於不能達到函數復用,導致效率變低,這與構造函數模式類似。