JavaScript設計模式基礎之面向物件的JavaScript(二)
阿新 • • 發佈:2018-12-09
多型
多型的實際含義:同一操作作用與不同的物件上面,可以產生不同的解釋和不同的執行結果,就是說,給不同的物件傳送同一個訊息
的時候,這些物件會根據這個訊息分別給出不同的反饋
程式碼如下:
class Duck{}; class Chicken{}; let make = function(animal){ //instanceof運算子用來判斷一個建構函式的prototype屬性所指向的物件是否存在另外一個要檢測物件的原型鏈上 if(animal instanceof Duck){ console.log('gagaga'); }else if(animal instanceof Chicken){ console.log('gegege'); } } make(new Duck()); make(new Chicken());
這段程式碼實現了多型性,當我們分別向鴨和雞發出叫指令時候,他們根據訊息做出了不同的反應
執行結果:
但是這個程式碼確不能讓人滿意 因為如果我們還需要增加物件 那麼會去反覆改動make函式
多型的思想是把變和不變分離開來,改寫一下這段程式碼
改寫後代碼如下:
//鴨 class Duck{}; Duck.prototype.sound = function(){ console.log('gagaga'); } //雞 class Chicken{}; Chicken.prototype.sound = function(){ console.log('gegege') } //狗 class Dog{}; Dog.prototype.sound= function(){ console.log('wangwangwang') } let make = function(animal){ animal.sound(); } make(new Duck()); make(new Chicken()); make(new Dog());
輸出如下:
這樣就已經把物件和行為完全分離了