# 面向对象的javascript
# 动态类型语言(dark typing)
编程语言大致可分静态语言和动态语言。JavaScript是动态与语言,不必需要借助超类就能实现“面向接口编程,而不是面向实现编程”,例如:对象含有push
和pop
方法就能当栈使用;对象有length
(slice和splice)就能当数组使用。
# 多态
- 定义:同一操作 作用于不同对象,产生不同的效果。
- 思想:做什么,谁去做 分开
- 作用:可减少条件分支语句
- 类型检查:静态语言会类型检查,所以需要通过继承来解决。
public class Chicken{
public void makeSound(){
System.out.printIn('咯咯咯');
}
}
public class Dark{
public void makeSound(){
System.out.printIn('嘎嘎嘎');
}
}
public class AnimalSound{
public void makeSound(Dark dark){
dark.makeSound();
}
}
public class Test{
public static void mind(String args[]){
AnimalSound animalSond = new AnimaSound();
Dark dark = new Dark();
animalSond.makeSound(dark); // 嘎嘎嘎
Chicken chicken = new Chicken();
animalSond.makeSound(chicken); // 报错
}
}
// 使用继承得到多态效果,解决类型检查问题
public abstract class Animal{
abstract makeSound(); // 抽象方法
}
public class Dark extends Animal{
public void makeSound(){
System.out.printIn('嘎嘎嘎');
}
}
public class Chicken extends Animal{
public void makeSound(){
System.out.printIn('咯咯咯');
}
}
Animal dark = new Dark();
Animal chicken = new chicken()
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
# Javascript 的多态
JavaScript不存在类型检查,只取决于对象上是否有makeSound
方法。不存在“类型耦合”
# 多态与设计模式
- 命令模式
- 组合模式
- 策略模式
# 封装
- 目的:隐藏信息(数据,实现细节,设计细节,对象类型等)
# 封装与设计模式
- 创建型:封装创建对象的变化
- 结构型:封装对象间的组合关系
- 行为型:封装对象的行为变化
# 继承-原型模式(第一个设计模式)
JavaScript的继承基于原型继承。原型模式是设计模式也是编程泛型。
原型模式的关键是语言本身是否提供了clone方法。ES5 提供了Object.create
方法。
var Plan = function(){
this.a = 4
}
var plan = new Plan()
p
1
2
3
4
5
6
2
3
4
5
6
javascript的对象未必是创建而来,可以克隆。