高階物件實現
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...