[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>
```
- 1.JS的基礎知識
- (1)調試
- (2)變量
- (3)數據類型
- 數據類型之間的轉換
- (4)全局變量和局部變量
- (5)運算符和表達式
- (6)數組
- 2.控制語句DOM,BOM,事件
- (1)控制語句
- (2)DOM的基礎
- 節點
- 改變樣式
- DOM事件
- 3.函數
- (1)聲明函數
- (2)構造函數
- (3)函數的參數
- (4)函數的傳參
- (5)改變this
- (6)重載
- (7)回調函數
- 4.數組
- (1)創建數組
- (2)增刪改查
- (3)字符串與數組的轉換
- 5.正則
- (1)創建正則
- (2)字符串中支持正則
- (3)語法
- 最核心的元字符
- 6.ajax
- (1)原生ajax
- (2)http,get,post
- (3)跨域
- (4)jQuery-ajax
- (5)axios
- 7.面向對象
- (1)原型
- (2)原型鏈,繼承
- (3)多態
- 8.es6小結
- 9.js+canvas實現驗證碼
- 10.js的作用域
- 11.閉包
- 實例
- toggle
- 圖片切換
- swiper
- 遮罩顏色漸變
- 表格添加
- 瀑布流
- ajax數據請求渲染
- 百度地圖