js中的多态

多态的实际含义是:同意操作作用于不同的对象上面可以产生不同的解释和不同的执行结果。换句话说,给不同的最像发送同一个消息的时候,这些对象会根据这个消息分别给出不同的反馈。
一段"多态" 的js代码

var makeSound = function (animal){
  if(animal instanceof Duck){
   console.log('嘎嘎嘎')
  }else if(animal instanceof Chicken){
   console.log('咯咯咯')
  }
}
var Duck = function () {
  
};
var Chicken = function () {
  
};
makeSound(new Duck());
makeSound(new Chicken());

上面的这段代码已经符合了对多态的定义,但是这样的"多态"是无法令人满意的,如果在增加一种动物,例如狗,我们必须改动makeSound函数,才能让狗也发出叫声,修改代码总是危险的,修改的地方越多,程序出错的可能性越大,而且当动物种类越多,makeSound有可能变成一个巨大的函数。

"多态"的思想把不变的部分隔离出来,把可变的部分封装起来,这给予我们扩展程序的能力,相对于修改代码,仅仅增加代码就能完成相同的功能,这样就先的优雅和安全很多。下面是改写后的代码。

var makeSound = function (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 Dog = function () {
}
Dog.prototype.sound = function () {
  console.log('汪汪汪')
}
makeSound(new Dog());
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • *面试心声:其实这些题本人都没怎么背,但是在上海 两周半 面了大约10家 收到差不多3个offer,总结起来就是把...
    Dove_iOS阅读 27,378评论 30 472
  • Android 自定义View的各种姿势1 Activity的显示之ViewRootImpl详解 Activity...
    passiontim阅读 175,734评论 25 709
  • 转自:http://blog.csdn.net/jackfrued/article/details/4492194...
    王帅199207阅读 12,743评论 3 93
  • 中午吃完饭休息的时候,顺手点开北京卫视的《暖暖的新家》。我很喜欢改造类的节目,大到旧的房子,小到旧的房子,经过奇思...
    糖啊糖果果阅读 1,592评论 0 0
  • LendingClub概述 P2P诞生于英国,经过一系列的衍生和发展,最终在21世纪由LendingClub等美国...
    天微漾阅读 10,950评论 0 0