多态

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

 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函数,修改代码的风险比较大,而多态的思想是将不变的事物和可能改变的事物分离开来。

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 googleMap = {

show: function(){

console.log( '开始渲染谷歌地图' );

}

};

var baiduMap = {

show: function(){

console.log( '开始渲染百度地图' );

}

};

var renderMap = function( type ){

if ( type === 'google' ){

googleMap.show();

}else if ( type === 'baidu' ){

baiduMap.show();

}

};

renderMap( 'google' ); // 输出:开始渲染谷歌地图

renderMap( 'baidu' ); // 输出:开始渲染百度地图

修改后

var renderMap = function( map ){

if ( map.show instanceof Function ){

map.show();

}

};

renderMap( googleMap ); // 输出:开始渲染谷歌地图

renderMap( baiduMap ); // 输出:开始渲染百度地图

最新文章

  1. PHP中常见魔术方法解析
  2. Java程序员必须掌握的8大排序算法
  3. js-处理回车事件
  4. 优化WPF 3D性能
  5. 06-scanf函数
  6. ManyToMany【项目随笔】关于异常object references an unsaved transient instance
  7. cmd命令行中的errorlevel和延迟赋值
  8. 用 jQuery 实现表单验证(摘抄)
  9. SQL Server2005中使用XML-数据类型、查询与修改
  10. 李洪强iOS开发之OC[017]函数和方法的区别
  11. Linux 命令 - mkdir: 创建目录
  12. ###学习《Effective C++》
  13. Jackson的Json转换
  14. 转;说说AngularJS中的$parse和$eval
  15. 2款不同样式的CSS3 Loading加载动画 附源码
  16. HDU 1880 字符串hash 入门题
  17. 开发一款直播APP系统软件应该有哪些功能,如何开发?
  18. MySQL索引和查询优化
  19. 《你不知道的JavaScript上卷》知识点笔记
  20. MySql在生产环境中是用mysqldump还是xtrabackup备份和恢复数据

热门文章

  1. Helm 安装Kafka
  2. springtask 基本使用和 cron 表达式
  3. ActiveMQ传输协议
  4. Console工程下如何不显示控制台黑窗口只显示Windows窗口
  5. web标准以及w3c标准
  6. C实现Linux中copy功能
  7. LaTeX表格紧跟文字 (不影响下方文本对齐)
  8. quick: iskindof使用注意
  9. 京东联盟开发(6)——推广链接解析SKUID
  10. JavaScript如何实现日期的前一天后一天转变