[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数据请求渲染
- 百度地图