> **多態:給不同的對象發送同一個消息,這些對象會根據這個消息分別給出不同的反饋。**
多態背后的思想:將"做什么"和"誰去做以及怎樣去做"分離。也就是將**不變的事物**與**可變的事物**分離。
### 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())
~~~