ThinkChat2.0新版上线,更智能更精彩,支持会话、画图、阅读、搜索等,送10W Token,即刻开启你的AI之旅 广告
[TOC] # 1.什么是多态 > 多态:给不同的对象发送同一个消息,这些对象会根据这个消息分别给出不同的反馈。 多态背后的思想:将"做什么"和"谁去做以及怎样去做"分离。也就是将不变的事物与可变的事物分离。 # 2.对象的多态性 ``` function makeSound(animal){ animal.sound(); } var Duck = function(){ } Duck.prototype.sound = function(){ console.log("鸭叫"); } var Chicken = function(){}; Chicken.prototype.sound = function(){ console.log("鸡叫") } makeSound(new Duck); ``` ## 例子 * 在电影拍摄现场,当导演喊出action,主角开始背台词,照明师负责打灯光,后面的群众演员假装中枪倒地,道具师往镜头里撒上雪花。在得到同一个消息时,每个对象都知道自己应该做什么。 * 利用对象的多态性,导演在发布消息时,不必考虑各个对象接到消息后应该做什么。对象应该做什么应该是实现约定好的,而不是临时决定的。每个对象应该做什么应该已经成为该对象的一个方法,被安装在对象内部,每个对象对自己的行为负责。所以这些对象可以根据同一消息,有条不紊的各自工作。 ``` function action(person){ person.act(); } var Lighter = function(){} Lighter.prototype.act = function(){ console.log("打开片场的灯光") } var Commoner = function(){} Commoner.prototype.act = function(){ console.log("群众演员倒地") } var Leader = function(){} Leader.prototype.act = function(){ console.log("主角背台词") } action(new Lighter()) ``` ## 例子 ``` <script> function mapRender(map){ map.render(); } function GoogleMap(){ } GoogleMap.prototype.render = function(){ console.log("google渲染") } function BaiduMap(){ } BaiduMap.prototype.render = function(){ console.log("百度渲染") } mapRender(new GoogleMap()); mapRender(new BaiduMap()); </script> ```