zoukankan      html  css  js  c++  java
  • 【前端基础】如何理解 JavaScript 中的多态

     

    什么是多态

    多态的字面意思就是多种状态,同一操作作用于不同的对象上,可以产生不同的解释和不同的执行结果。比方说,我养了一只猫和一只狗,我对它们发出同一个指令 "叫一下",猫会喵喵喵,而狗会汪汪汪,所以让它们叫一下就是同一操作,而叫声不同则是不同的执行结果。用伪代码来实现就是这样的:

    function getVoice(animals) {
        if(animals instanceof Cat){
            console.log('喵~');
            
        }
        if(animals instanceof Dog){
            console.log('汪~');
        }
    }
    class Cat {}
    class Dog {}
    getVoice(new Cat()); // '喵~'
    getVoice(new Dog()); // '汪~'
    复制代码

    那么如果我们想增加一个动物呢?再多加一个判断?那么之后我每次都想要加一个动物的叫声就都要修改一次 getVoice?是不是有点繁琐呢?

    所以我们要想想如何解决这个问题~

    对象的多态性

    其实多态最根本的作用就是通过把过程化的条件语句转化为对象的多态性,从而消除这些条件分支语句。

    通俗一点来讲,就是把 "做什么" 和 "谁去做以及怎么去做" 分离开,抽象概括就是把 "不变的事物" 和 "可能改变的事物" 分离开。

    最开始我们举的例子中就可以拆分理解成这样:

    不变的事物是:动物发出叫声 可能改变的事物是:什么动物发出什么样的叫声

    那我们就可以把 "动物发出叫声" 这个动作分布到各个类上(封装到各个类上),然后在发出叫声的 getVoice 函数中调用"叫"这个动作就可以了。

    上面这个例子就可以修改成这样啦~

    function getVoice (animals) {
        if (animals.sound instanceof Function) {
            // 判断是否有animal.sound且该属性为函数
            animals.sound();
        }
    }
    class Cat {
        sound () {
            console.log('喵~');
        }
    }
    class Dog {
        sound () {
            console.log('汪~');
        }
    }
    getVoice(new Cat()); // '喵~'
    getVoice(new Dog()); // '汪~'
    复制代码

    多态的实际应用

    多态在设计模式中应用得比较广泛,比如 组合模式 / 策略模式等等。~~

    虽然我们在平时的开发中不太用的到,但是一旦我们涉及到一些设计模式的话,多态还是很有用的~~

  • 相关阅读:
    对中级 Linux 用户有用的 20 个命令
    对 Linux 新手有用的 20 个命令
    有趣的JavaScript原生数组函数
    编写更好的CSS
    一套名企WEB前端面试题,不提供答案
    探索JavaScript中Null和Undefined的深渊
    30个你必须记住的CSS选择符
    揭秘JavaScript中谜一样的this
    2013年JavaScript开发人员调查结果
    给HTML初学者的三十条最佳实践
  • 原文地址:https://www.cnblogs.com/onesea/p/15431940.html
Copyright © 2011-2022 走看看