JS高階物件 高階類 或稱Mixin模式

2021-09-25 03:36:35 字數 1935 閱讀 5743

mixin模式,混合模式。這是一種不用繼承就可以復用的技術。主要還是為了解決多重繼承的問題。多繼承的繼承路徑是個問題

js是基於物件的,類和物件都是物件模板

混合mixin,指的是將乙個物件的全部或者部分拷貝到另乙個物件上去。其實就是屬性了;可以將多個類或物件混合成乙個類或物件

class serialization

}}class point extends serialization

}//s = new serialization(); // 構造serialization失敗

//p = new point(4,5); // 構造子類物件時,呼叫父類構造器執行也會失敗

父類建構函式中,要求具有屬性是stringify的序列化函式,如果沒有則丟擲異常

以下是完整繼承的**

class serialization

}}class point extends serialization

stringify ()

}class point3d extends point

stringify ()

}p = new point(4,5);

console.log(p.stringify())

p3d = new point3d(7,8,9);

console.log(p3d.stringify());

// 普通的繼承

class a extends object {};

console.log(a);

// 匿名類

const a1 = class

}console.log(a1);

console.log(new a1(100).x);

// 匿名繼承

const b = class extends object

};console.log(b);

b = new b();

console.log(b);

// 箭頭函式,引數是類,返回值也是類

// 把上例中的object看成引數

const x = (sup) =>

};}// 演化成下面的形式

const c = sup => class extends sup

};//cls = new c(object); // 不可以new,因為是乙個普通函式,它的返回值是乙個帶constructor的類

cls = c(a); // 呼叫它返回乙個類,乙個帶constructor的class

console.log(cls);

c = new cls();

console.log(c);

// 其它寫法

c1 = new (c(object))(); // new優先順序太高了,所有後面要加括號才能先呼叫

可以改造上面序列化的例子了

const serialization = sup => class extends sup 

}}class point

}class point3d extends serialization(point)

stringify ()

}let p3d = new point3d(70,80,90);

console.log(p3d.stringify());

注意:

serialization(point)這一步實際上是乙個匿名箭頭函式呼叫,返回了乙個新的型別,point3d繼承自這個新的匿名型別,增強了功能

react框架大量使用了這種mixin技術

JS 高階物件 高階類或稱Mixin模式

高階物件實現 mixin模式,混合模式 js是基於物件的,類和物件都是物件模板 混合mixin,指的是將乙個物件的全部或者部分拷貝到另乙個物件上去。其實就是屬性 可以將多個類或物件混合成乙個類或物件 繼承 子子孫孫都有基類的功能 class serialization class point ext...

js物件高階

使用建構函式來建立物件,建構函式相當於乙個模板。模板就是所有建立的物件的型別。instanceof 判斷某個物件是否屬於某個型別。js特性 基本資料型別可以訪問與之對應的物件型別的屬性和行為,在訪問時,自動將基本資料類 型轉換為物件型別。string string number number boo...

JS建立物件 高階

雖然用object建構函式或物件字面量可以建立單個物件,但有乙個明顯的缺點 使用同乙個介面建立物件,會產生大量重複的 為此紅寶書中又有三種基本的建立物件的方式 工廠模式 function createperson name,age,job return o var person1 createper...