1. 程式人生 > >JavaScript設計模式基礎之面向物件的JavaScript(二)

JavaScript設計模式基礎之面向物件的JavaScript(二)

多型

多型的實際含義:同一操作作用與不同的物件上面,可以產生不同的解釋和不同的執行結果,就是說,給不同的物件傳送同一個訊息

的時候,這些物件會根據這個訊息分別給出不同的反饋

程式碼如下:

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

輸出如下:

這樣就已經把物件和行為完全分離了