您现在的位置是:群英 > 开发技术 > web开发
JavaScript多态的含义是什么,用代码怎样实现
Admin发表于 2022-09-01 17:45:38833 次浏览
这篇文章分享给大家的内容是关于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多态的含义是什么,用代码怎样实现”的介绍了,感谢各位的阅读,希望文本对大家有所帮助。如果想要了解更多知识,欢迎关注群英网络,小编每天都会为大家更新不同的知识。

免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:mmqy2019@163.com进行举报,并提供相关证据,查实之后,将立刻删除涉嫌侵权内容。

标签: JavaScript
相关信息推荐
2022-08-06 17:57:19 
摘要:下面由golang​教程栏目给大家介绍关于golang select典型用法,希望对需要的朋友有所帮助!
2021-10-27 17:55:23 
摘要:PHP下怎么样比较两个日期?本文我们就来了解比较两个日期的方法,这里分为两种情况,一种是给定的日期格式相同和给定的日期格式不同,那么这两种情况要怎样比较两个日期呢?我们接下来往下看。
2022-06-08 17:44:03 
摘要:下面由golang教程栏目给大家介绍Golang对excel进行处理的方法,希望对需要的朋友有所帮助!之前有关Golang的文章主要是基于Golang的标准库来讲解的,今天我们来看看Golang的一个开源库,它可以用来处理xlsx文件...
云活动
推荐内容
热门关键词
热门信息
群英网络助力开启安全的云计算之旅
立即注册,领取新人大礼包
  • 联系我们
  • 24小时售后:4006784567
  • 24小时TEL :0668-2555666
  • 售前咨询TEL:400-678-4567

  • 官方微信

    官方微信
Copyright  ©  QY  Network  Company  Ltd. All  Rights  Reserved. 2003-2019  群英网络  版权所有   茂名市群英网络有限公司
增值电信经营许可证 : B1.B2-20140078   粤ICP备09006778号
免费拨打  400-678-4567
免费拨打  400-678-4567 免费拨打 400-678-4567 或 0668-2555555
微信公众号
返回顶部
返回顶部 返回顶部