Mixin 類到底 Mix 了啥?
Mixin 是一個(gè)類,不單獨(dú)使用,被用于混(Mix)入(in)到已有的類中,提供額外的方法。
為什么引入 Mixin 類?我認(rèn)為其原因是我們要用一個(gè)已有的類,但是已有的類中又缺少一些方法,我們又不想去過多修改已有的類。怎么辦? 定義一個(gè) Mixin 類,把它混到已有的類中去。分清哪個(gè)是已有的類,哪個(gè)是 Mixin 類,比較重要。
Python 中的 Mixin
在下面的 Python 代碼中, 已有的類是 Name,其只有一個(gè)初始化方法 __init__() 。 如何為 Name 提供比如將名字全部轉(zhuǎn)為大寫或小寫的功能呢? 當(dāng)然可以直接去修改 Name 這個(gè)類,手動(dòng)添加方法。 可是,如果有時(shí)不方便去修改,那么就定義一個(gè) Mixin 類,本例中叫做 MixinClass,讓 Name 繼承它就可以。 當(dāng)然,這里還是小小修改了 Name, 即在 class Name 的后面添加了 (MixinClass)。

JavaScript 中的 Mixin
JavaScript 也允許 Mixin,不過是混入一個(gè)對(duì)象(而非類)。在下面的 JavaScript 代碼中, 通過 Object.assign() 函數(shù)將 mixinObject 對(duì)象中的兩個(gè)方法復(fù)制到 Name.prototype 中,從而使得類 Name 獲得了 allUpperCase() 與 allLowerCase() 方法。

JavaScript 與 Python 互通互鑒,Nice 。
標(biāo)簽:mixin