多态

从字面的意思上看,多态就是“多种状态”,在面向对象的语言中,接口的多种不同的实现方式叫做多态。在JavaScript的语言中本身就存在着多态的,我们可以利用JavaScript语言的宽松性去实现

下面的代码是非多态的

  var sound = function (animal) {
      if (animal instanceof Duck) {
        console.log("嘎嘎嘎")
      } else if (animal instanceof Chinken) {
        console.log("咯咯咯")
      }
    }
    var Duck = function () {}
    var Chinken = function () {}
    sound(new Duck()) 
    sound(new Chinken())

看上面的代码我们发现小鸡和鸭子的叫声是不一样的,所以如果我们想要在公用的方法中,分别调用自己对应的方法,必须要在公用的方法中进行if和else的分支判断,这样会有两个问题,第一个是如果我们的动

物的类型庞大了,此时我们的sound分支也会越来越庞大,代码也会越来越难维护;第二个就是每新增一个动物都必须要在sound中维护一份,否则无法使用

可以将代码设置为“多态”

  var Sound = function (animal) {
      animal.sound()
    }
    var Duck = function () {}
    Duck.prototype.sound = function () {
      console.log("嘎嘎嘎")
    }
    var Chicken = function () {
    }
    Chicken.prototype.sound = function () {
      console.log("咯咯咯")
    }
    Sound(new Chicken())
    Sound(new Duck())

上面的代码也可以实现Sound方法,核心是将所有的方法写在自己的prototype上,让Sound帮你调用,好处是我们不用在公用函数中进行多分支判断,代码会更易维护,耦合性会很低

 

posted @ 2022-01-05 21:03  keyeking  阅读(32)  评论(0编辑  收藏  举报