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

2021-09-25 04:24:23 字數 2775 閱讀 5210

高階物件實現

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()

, y=

$>`

}}class

point3d

extends

point

stringify()

, y=

$, z=

$>`

}}p =

newpoint(4

,5);

console.

log(p.

stringify()

)p3d =

newpoint3d(7

,8,9

);console.

log(p3d.

stringify()

);/* 執行結果

point constructor~~~~

serialization constructor~~~

point constructor~~~~

serialization constructor~~~

*/

將類的繼承構建成箭頭函式

// 普通的繼承

class

aextends

object

;console.

log(a)

;// 匿名類

consta1=

class

}console.

log(a1)

;console.

log(

newa1

(100

).x)

;// 匿名繼承

constb=

class

extends object };

console.

log(b)

;b =

newb()

;console.

log(b)

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

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

constx=

(sup)

=>};

}// 演化成下面的形式

const

c= sup =>

class

extends sup };

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

cls =c(

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

console.

log(cls)

;c =

newcls()

;console.

log(c)

;// 其它寫法

c1 =

new(

c(object))(

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

/* 執行結果

[function: a]

[function: a1]

100[function: b]

b constructor

b {}

[function: a]

c constructor

a {}

c constructor

*/

說到底,上面的c這個函式,本質上就是傳入乙個基類,然後通過基類繼承構造乙個新的類。

缺什麼能力 補什麼能力

const

serializationmixin

= sup =>

class

extends sup }}

class

point

}class

point3d

extends

serializationmixin

(point)

stringify()

.$.$

>`;}

}let p3d =

newpoint3d(70

,80,90

);console.

log(p3d.

stringify()

);/*執行結果

serializationmixin constructor~~~

point constructor~~~~

*/

注意:

serialization(point)傳入的引數是類,返回值也是乙個類,這就是高階類

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

mixin模式,混合模式。這是一種不用繼承就可以復用的技術。主要還是為了解決多重繼承的問題。多繼承的繼承路徑是個問題 js是基於物件的,類和物件都是物件模板 混合mixin,指的是將乙個物件的全部或者部分拷貝到另乙個物件上去。其實就是屬性了 可以將多個類或物件混合成乙個類或物件 class seri...

js物件高階

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

JS建立物件 高階

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