javaScript_Design

原型模式

文字方式

  • 原型模式(prototype)是指原型实例指向创建对象的种类,并且通过拷贝这些
    原型创建新对象。
    Object.create(prototype, OptionnalDes)

拟物化

袋鼠和袋鼠崽子

作用
1.原型对象本身就是有效利用了每个构造创建的对象
注意事项:
1.注意浅拷贝和深拷贝

代码实战

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
  <!DOCTYPE html>
<html>
<head>
<title>test</title>
</head>
<body>
<script type="text/javascript">
//原型
var myobj = {
str: "mysting",
num: 1,
myarr: [],
myobj: {
innerobj: {
test: 25
}
}
};
function clone(obj){
// var ret = {}, k;
// for(k in obj){
// ret[k] = obj[k];
// }
var ret, k, b;
if((b = (obj instanceof Array))|| obj instanceof Object){
console.log('init');
ret = b?[]: {};
for(k in obj){
if(obje[k] instanceof Array || obj[k] instanceof Object){ret[k] = clone(obj[k]);}else{
ret[k] = obj[k];
}

}
}

return ret;
}
//浅拷贝
var result = clone(myobj);
result.myobj.innerobj[test] = 12;
console.log(result);
</script>

装饰者模式

装饰者用于包装同接口的对象,向方法添加行为,还可以设置为引用。

装饰着用于通过重载方法的形式添加新功能,该模式可以在被装饰者前面或者后面
加上自己行为以达到特定的目的。

装饰家居
给门上加上花边

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
var home = function (){

}
home.prototype.space = function (){
console.log('我是一个空房子');
},

var zhuangshi = function(home){
this.zfangzi = home;
};

zhuangshi.prototype.space = function(){
this.zfangzi.space();
conosole.log('我添加了一个家居');
}
var _fangzi = new home();
var _zhuangshi = new zhuangshi(_fangzi);
_zhuangshi.space();

组合模式

将对象组合成树形结构以表示“部分-整体 ”