面向对象的JS

1. 动态类型和鸭子类型

编程语言按照数据类型大体可以分为两类,一类是静态类型语言,另一类是动态类型语言

  • 静态类型语言在编译时便已确定变量的类型。
  • 动态类型语言的变量类型要到程序运行时,等变量被赋予某个值之后,才会具有某种类型。
    动态类型语言对变量类型的宽容给实际编码带来了很大的灵活性。由于无需进行类型检测,我们可以尝试调用任何对象的任意方法,而无需去考虑它原本是否被设计为拥有该方法。
    这一切都建立在鸭子类型(duck typing)的概念上。通俗说法是如果它走起来像鸭子,叫起来也像鸭子,那么它就是鸭子。

2. 多态

多态的实际意义是: 同一操作作用域不同的对象上面时,可以产生不同的解释和不同的执行结果。换言之: 给不同的对象发送同一条消息,这些对象会根据这条消息给出不同的反馈。

  • 多态在面向对象程序设计中的作用

可以用下面的例子来解释:
在电影的拍摄现场,当导演喊出"action"时,主角开始背台词,照明师负责打灯光,后面的群众演员假装中弹倒地,道具师往镜头里撒雪花。在得到同一个消息时,每个对象都知道自己应该做什么。如果不利用对象的多态性,而是用面向过程的方式来编写这一段代码,那么相当于在电影开始拍摄后,导演每次都要走到每个人的面前,确认他们的职业分工,然后告诉他们应该做什么。如果映射到程序中,那么程序中将会充斥着条件分支语句。

将行为分布在各个对象中,并让这些对象各自负责自己的行为,这正是面向对象设计的优点

const googleMap = {
    show: () => console.log('开始渲染谷歌地图');
};
const baiduMap = {
    show: () => console.log('开始渲染百度地图');
};
const renderMap = (map) => {
    if (map.show instanceof Function) {
        map.show();
    }
};
renderMap(googleMap); // 输出:开始渲染谷歌地图
renderMap(baiduMap); // 输出:开始渲染百度地图
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

  • Swift1> Swift和OC的区别1.1> Swift没有地址/指针的概念1.2> 泛型1.3> 类型严谨 对...
    cosWriter阅读 13,902评论 1 32
  • 1.ios高性能编程 (1).内层 最小的内层平均值和峰值(2).耗电量 高效的算法和数据结构(3).初始化时...
    欧辰_OSR阅读 30,023评论 8 265
  • 背景: 有一个客户之前一直在用我们App,但都没出现任何问题,今天升级了新版App却一直无法联网。我第一反应是iO...
    JonorZhang阅读 4,613评论 5 0
  • 1.渡口 我的渡口是烽火焠刃的刀剑 是遥远又遥远的石碑 是终有一日的挫骨扬灰 和粒粒灰尘的依偎 2.石碑 我承认三...
    野渡ing阅读 1,283评论 0 2
  • 想到一个例子,小孩子智慧的例子。
    燕白阅读 1,004评论 0 0

友情链接更多精彩内容