面向对象的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); // 输出:开始渲染百度地图

你可能感兴趣的:(面向对象的JS)