对象多态笔记

一段多态的javascript代码
var makeSound = function(animal) {
    if (animal instanceof Duck) {
      console.log('嘎嘎嘎')
    }
    if (animal instanceof Chicken) {
      console.log('咯咯咯')
    }
  }

  var Duck = function() {}
  var Chicken = function() {}

  makeSound(new Duck())
  makeSound(new Chicken())
多态背后的思想是将“做什么”和“谁去做已经怎么做”分离开来,也就是将不变得事物和可能改变的事物分离开来。

下面是改写后的代码:

  var makeSound = function(animal) {
    animal && animal.sound()
  }

  var Duck = function () { }
  
  Duck.prototype.sound = function() {
    console.log('嘎嘎嘎')
  }

  var Chicken = function () { }
  
  Chicken.prototype.sound = function() {
    console.log('咯咯咯')
  }

  makeSound(new Duck()) // 嘎嘎嘎
  makeSound(new Chicken()) // 咯咯咯

再看一个

  var googleMap = {
    show: function() {
      console.log('开始渲染谷歌地图')
    }
  }

  var baiduMap = {
    show: function() {
      console.log('开始渲染百度地图')
    }
  }

  var renderMap = function(type) {
    if (type === 'googleMap') {
      googleMap.show()
    }
    if (type === 'baiduMap') {
      baiduMap.show()
    }
  }

  renderMap('googleMap')
  renderMap('baiduMap')

我们还是先把程序中相同的部分抽离处理,那就是显示某个地图:

 var googleMap = {
    show: function() {
      console.log('开始渲染谷歌地图')
    }
  }

  var baiduMap = {
    show: function() {
      console.log('开始渲染百度地图')
    }
  }

  var renderMap = function(map) {
    if (map && map.show instanceof Function) {
      map.show()
    }
  }

  renderMap(googleMap)
  renderMap(baiduMap)

对象多态性提示我们,做什么和怎么去做是可以分开的,即使以后增加了搜搜地图,renderMap函数仍然不需要做任何改变

  var googleMap = {
    show: function() {
      console.log('开始渲染谷歌地图')
    }
  }

  var baiduMap = {
    show: function() {
      console.log('开始渲染百度地图')
    }
  }

  var sosoMap = {
    show: function () {
      console.log('开始渲染搜搜地图')
    }
  }

  var renderMap = function(map) {
    if (map && map.show instanceof Function) {
      map.show()
    }
  }

  renderMap(googleMap)
  renderMap(baiduMap)
  renderMap(sosoMap)
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 假设我们要编写一个地图应用,现在有两家可选的地图API 提供商供我们接入自己的应用。目前我们选择的是谷歌地图,谷歌...
    world_7735阅读 1,189评论 0 1
  • 多态的含义 多态的实际含义是:同一操作作用于不同的对象什么,可以产生不同的解释和不同的执行结果。换句话说,给不同的...
    杰哥长得帅阅读 1,846评论 0 0
  • 书名异类的天赋作者(英)凯文·达顿(Kevin Dutton)译者金九菊 / 程亚克豆瓣http://douban...
    xuwensheng阅读 11,575评论 0 9
  • "多态"的字面意思就是"多种状态",在OOP中意味着我们的代码可能要面临着多个分支。在日常编写Javascript...
    亚历山大猫阅读 3,994评论 0 0
  • 多态背后的思想是将"做什么"和"谁去做以及怎样去做"分离开来,也就是将"不变的事物"与'"可能改变的事物"分离开来...
    JUN_API阅读 1,820评论 0 0