> **多态:给不同的对象发送同一个消息,这些对象会根据这个消息分别给出不同的反馈。**
多态背后的思想:将"做什么"和"谁去做以及怎样去做"分离。也就是将**不变的事物**与**可变的事物**分离。
### 1.对象的多态性
~~~
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);
~~~
现在,我们向鸭和鸡发出"叫唤"的消息,它们接收到消息后分别作出不同的反应。
### 2.例子
* 在电影拍摄现场,当导演喊出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())
~~~