首页前端开发其他前端知识JavaScript多态的含义是什么,用代码怎样实现

JavaScript多态的含义是什么,用代码怎样实现

时间2024-03-26 05:36:03发布访客分类其他前端知识浏览587
导读:这篇文章分享给大家的内容是关于JavaScript多态的含义是什么,用代码怎样实现,本文介绍得很详细,内容很有参考价值,希望可以帮到有需要的小伙伴,接下来就让小编带领大家一起了解看看吧。 JavaScript中有多态...
这篇文章分享给大家的内容是关于JavaScript多态的含义是什么,用代码怎样实现,本文介绍得很详细,内容很有参考价值,希望可以帮到有需要的小伙伴,接下来就让小编带领大家一起了解看看吧。

    


JavaScript中有多态;多态表示的是同一操作作用于不同的对象上面可以产生不同的解释和不同的执行结果,JavaScript中的多态体现在子类中可直接实现同名函数即可覆盖父类函数,JavaScript中的父类函数都可以直接覆盖。

本教程操作环境:windows10系统、javascript1.8.5版、Dell G3电脑。

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());
 // '汪~'

多态的实际应用

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

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

JS的封装与多态

除了继承,封装与多态也是面向对象思想的组成部分。JS的封装、多态也是通过属性的灵活应用“模拟”实现的。

通过在类中设置公共属性,并在子类中实现,就可以模拟封装。

而多态的体现,则更为简单,在子类中直接实现同名函数即可覆盖(override)父类函数。JS中没有类似C#中的virtualde 关键字,所有父类函数都可以直接覆盖。

示例:

function calc(value1,value2){
    
this.data1=value1;
    
this.data2=value2;
     
this.GetResult;

this.toString=function(){
    
if(this.GetResult)
return this.GetResult()+"";
    
return "0";

}

}

 
function sumCalc(value1,value2){

calc.call(this,value1,value2)
this.GetResult=function(){
     
return this.data1+this.data2;

}

}

function productCalc(value1,value2){

calc.call(this,value1,value2)
this.GetResult=function(){
     
return this.data1*this.data2;

}

}
    
var s=new sumCalc(2,3);
    
alert(s.toString());
      //弹框5
var p=new productCalc(2,3);
    
alert(p.toString());
      //弹框6

如上,sumCalc类与productCalc类都继承并实现了calc类,并实现了“抽象函数”GetResult()。这就是JS封装的实现方式。

另外,JS中的所有类都继承于Object,而Object有自己的toString()函数。所以,上面calc类的toString()函数实际上覆盖了原有的函数----多态的体现。


以上就是关于“JavaScript多态的含义是什么,用代码怎样实现”的介绍了,感谢各位的阅读,希望文本对大家有所帮助。如果想要了解更多知识,欢迎关注网络,小编每天都会为大家更新不同的知识。

声明:本文内容由网友自发贡献,本站不承担相应法律责任。对本内容有异议或投诉,请联系2913721942#qq.com核实处理,我们将尽快回复您,谢谢合作!

javascript

若转载请注明出处: JavaScript多态的含义是什么,用代码怎样实现
本文地址: https://pptw.com/jishu/653293.html
JavaScript的map对象是什么,Map遍历方法有哪些 Golang中如何用GIN构建WEB服务,操作是什么

游客 回复需填写必要信息