1. 程式人生 > 實用技巧 >繼承的實現方式之 寄生式

繼承的實現方式之 寄生式

基本模式

原型式繼承(Prototypal Inheritance)和工廠模式的結合,用一個函式先建立以父類為原型的物件,再為這個物件新增需要的子類屬性及方法。最後直接返回這個物件。

function object(o){
    function F(){}
    F.prototype = o;
    return new F();
}

function createTalkingObj(original){
    let clone = object(original); //生成一個原型為original的clone
    clone.sayHi = function(){
        console.log(
"Hi"); } return clone; } let person = { name: "Jack", age: 18, friends: ["Bob", "Lily"] } let personCanTalk = createTalkingObj(person); personCanTalk.sayHi(); personCanTalk.friends.push("Mike"); console.log(person.friends);

需要注意的是,這種模式並沒有用到建構函式,繼承是直接發生在物件之間的,所有物件的constructor都是Object。

所有物件共享一套屬性,如果改變子物件的非引用型別屬性的值,如personCanTalk.name = "TalkingJack";,實際是在子物件上新建了name屬性,隱藏了父物件的屬性。如果改變的是引用型別的值,則父物件,以及其他所有共享這一套屬性的物件,都會被改變。