美文网首页
面向对象的JS

面向对象的JS

作者: 月魂king | 来源:发表于2018-08-23 11:40 被阅读0次

    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

          本文链接:https://www.haomeiwen.com/subject/yardiftx.html