JavaScript面向对象之多态

编程入门 行业动态 更新时间:2024-10-18 19:30:06

JavaScript<a href=https://www.elefans.com/category/jswz/34/1769334.html style=面向对象之多态"/>

JavaScript面向对象之多态

今天我们研究一下javascript面向对象中的多态

javascript 多态

在《JavaScript设计模式与开发实践》中有这么一个故事:
主人家里养了两只动物,分别是一只鸭和一只鸡,当主人向它们发出“叫”的命令时,鸭会“嘎嘎嘎”地叫,而鸡会“咯咯咯”地叫。这两只动物都会以自己的方式来发出叫声。它们同样“都是动物,并且可以发出叫声”,但根据主人的指令,它们会各自发出不同的叫声。
其实,其中就蕴含了多态的思想。下面我们通过代码进行具体的介绍。

非多态代码示例

var makeSound = function( animal ){if ( animal instanceof Duck ){console.log( '嘎嘎嘎' );}else if ( animal instanceof Chicken ){console.log( '咯咯咯' );}
};var Duck = function(){};
var Chicken = function(){};makeSound( new Duck() ); // 嘎嘎嘎
makeSound( new Chicken() ); // 咯咯咯

多态的代码示例

var makeSound = function(animal) {animal.sound();
}var Duck = function(){}
Duck.prototype.sound = function() {console.log('嘎嘎嘎')
}
var Chicken = function() {};
Chicken.prototype.sound = function() {console.log('咯咯咯')
}makeSound(new Duck()); // 嘎嘎嘎 
makeSound(new Chicken()); // 咯咯咯

关于这个例子的详细讲解,可以阅读下这本书籍的1.2章节点击查看
我们呢,还是用我们自己的例子再来讲解一遍

function makeDoSth(person) {person.doSth()}function Ljj() {this.name = "刘家军",this.hobby = "敲代码"}
Ljj.prototype.doSth = function() {console.log(`${this.name}陪小仙女,并且还${this.hobby}了`)}function Yh() {this.name = "袁姮",this.hobby = "旅游",this.privates = "购物"}
Yh.prototype.doSth = function() {console.log(`${this.name}陪大神仙`)}const LJJ = new Ljj()
const YH = new Yh()makeDoSth(LJJ) // 刘家军陪小仙女
makeDoSth(YH) // 袁姮陪大神仙

通过这个例子我们可以想象一下
比如 前几天元旦放假就类似发出了一个命令(makeDoSth),然后LJJ和YH都接收到了这个命令并且执行了自己要做的事情(doSth),虽然是同一个命令(makeDoSth),但是LJJ和YH做的事情(doSth)确不同;
因为放假了(makeDoSth),LJJ和YH都要做事情(doSth),所以我们将doSth这个方法抽离出来进行封装,
如果不抽离出来封装要在发号命令(makeDoSth)内部进行条件判断,但是当接收到这个命令的人越来越多,添加的判断条件越来越多,影响可读性于与扩展性
多态的实际含义是:同一操作作用于不同的对象上面,可以产生不同的解释和不同的执行结果。换句话说,给不同的对象发送同一个消息的时候,这些对象会根据这个消息分别给出不同的反馈。
在这个例子中,LJJ和YH都在发出命令(makeDoSth)后要做些事情(doSth),这是不变的,但是他们所做的事情是不同的,所具备的属性也不是完全相同的。把不变的部分隔离出来,把可变的部分封装起来,这给予了我们扩展程序的能力,程序看起来是可生长的,也是符合开放—封闭原则的,相对于修改代码来说,仅仅增加代码就能完成同样的功能,这显然优雅和安全得多。

将行为分布在各个对象中,并让这些对象各自负责自己的行为,这正是面向对象设计的优点。
多态增加了代码的可扩展性,降低了代码维护成本

友情链接:点击查看所有文章目录

友情链接:点击查看 JavaScript面向对象系列文章目录

更多推荐

JavaScript面向对象之多态

本文发布于:2024-02-07 01:32:03,感谢您对本站的认可!
本文链接:https://www.elefans.com/category/jswz/34/1752269.html
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。
本文标签:面向对象   多态   JavaScript

发布评论

评论列表 (有 0 条评论)
草根站长

>www.elefans.com

编程频道|电子爱好者 - 技术资讯及电子产品介绍!