1.2-JavaScript对象的多态性
来源:互联网 发布:sqlpro for mac 编辑:程序博客网 时间:2024/05/16 05:06
参考书籍: Javascript设计模式与开发实践(曾探)
多态背后的思想是将“做什么”和“谁去做以及怎样去做”分离开来,也就是将“不变的事物”与 “可能改变的事物”分离开来,归根结底先要消除类型之间的耦合关系。 动物都会叫,这是不变的,但是不同类型的动物具体怎么叫是可变的。把不变的部分隔离出来,把可变的部分封装起来,这给予了我们扩展程序的能力,程序看起来是可生长的,也是符合开放—封闭原则的。
JavaScript 是一门不必进行类型检查的动态类型语言,即弱类型的语言。静态类型语言在编译时会进行类型匹配检查。以Java 为例,所以不能给变量赋予不同类型的值。
JavaScript 对象的多态性是与生俱来的。JavaScript 作为一门动态类型语言,它在编译时没有类型检查的过程,既没有检查创建的对象类型,又没有检查传递的参数类型, 我们既可以往makeSound 函数里传递duck 对象当作参数,也可以传递chicken 对象当作参数。
多态最根本的作用就是通过把过程化的条件分支语句转化为对象的多态性,从而消除这些条件分支语句。
在JavaScript 这种将函数作为一等对象的语言中,函数本身也是对象,函数用来封装行为并且能够被四处传递。当我们对一些函数发出“调用”的消息时,这些函数会返回不同的执行结果,这是“多态性”的一种体现,也是很多设计模式在JavaScript 中可以用高阶函数来代替实现的原因。
实例一:
function makeSound(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());
实例二:
var googleMap = { show: function () { console.log('开始渲染谷歌地图'); }};var baiduMap = { show: function () { console.log('开始渲染百度地图'); }};function renderMap(map) { if (map.show instanceof Function) { map.show(); }}renderMap(googleMap);renderMap(baiduMap);var sosoMap = { show: function(){ console.log( '开始渲染搜搜地图' ); }};renderMap( sosoMap ); // 输出:开始渲染搜搜地图
0 0
- 1.2-JavaScript对象的多态性
- 4.3对象的多态性
- Java对象的多态性
- 浅谈-----对象的多态性
- java对象的多态性
- java对象的多态性
- 对象的多态性
- 对象的多态性
- 面向对象的多态性
- java对象的多态性
- 对象的多态性
- 对象的多态性
- java对象的多态性
- 面向对象的多态性
- 多态性——对象的多态性
- 面向对象--对象的多态性
- Java中对象的多态性
- java 面向对象的多态性
- MyEclipse启动tomcat出现java.lang.OutOfMemoryError: PermGen space 的解决方案
- sql server备份sql
- [POJ 2385]Apple Catching[DP]
- MyMusic遇到的几个问题小结
- seajs 之define函数
- 1.2-JavaScript对象的多态性
- 一个有效防止数据采集的方法,哈哈哈
- MyBatis整合Spring
- 算法学习笔记
- Android应用开发-护眼提醒-总结篇
- Android设备在Mac上不能真机调试
- Qt 打印图片
- 无法启动程序"D:\Desktop\code\MMI3\MainFrame\debug\MainFrame.exe" "D:\Desktop\code\bin\debug"不是有效的工作目录
- Play FrameWork项目中scala页面遍历list并操作index下标