1、对象的拷贝

对象的拷贝分为:深拷贝和浅拷贝 浅拷贝: eg:var obj1 = {a:10}; var obj = obj1; 浅拷贝拷贝的是地址; 深拷贝 : eg:var obj = {}; for(var i in obj1){ obj[i] = obj1[i]; } 深拷贝拷贝的是值,例子中的obj和obj1只是相同的独立对象,拷贝的是具体的值。 但是对于多维的还有引用类型,同样的方法实现不了,那就需要深拷贝的封装

封装:

var obj = {a:[10]};
			function deepCopy(obj){
				if(Array.isArray(obj)){
					var newObj = [];
				}else{
					var newObj = {};
				}
				for(var attr in obj){
					if(typeof obj[attr] == "object"){
						newObj[attr] = deepCopy(obj[attr]);
					}else{
						newObj[attr] = obj[attr];
					}
				}
				return newObj;
			}
									或者:
		```

var copyObj = JSON.parse(JSON.stringify(obj)); console.log(copyObj); copyObj.a.push(20); console.log(copyObj,obj);



2、单例模式 保证一个类只有一个实例,并提供一个访问它的全局访问点。 var singleTon = (function(){ var _instance = null;

		//类的定义
		function Foo(){
			var privateProp = "私有属性";
			this.instanceProp = "实例属性";
			this.init = function(){ };//实例方法
		}
		Foo.prototype.fnName = function(){ };//原型方法
		Foo.prototype.protoProp = "原型对象属性";
		
		if(!_instance){
			_instance = new Foo();
		}
		
		//return _instance;
		
		return {
			getInstance:function(){
				return _instance;
			}
		}

})();


**3、观察者模式**
观察者模式(发布-订阅模式):其定义对象间一种一对多的依赖关系,当一个对象的状态发生改变时,所有依赖于它的对象都将得到通知。
<script type="text/javascript">
	//"loginSucess"
	var observer = {
		regist:function(eventName,callback){
			if(!this.obj){
				this.obj = {};
			}
			if(!this.obj[eventName]){
				this.obj[eventName] = [callback];
			}else{
				this.obj[eventName].push(callback);
			}
		},
		emit:function(eventName){
			if(this.obj[eventName]){
				for(var i = 0; i < this.obj[eventName].length; i++){
					this.obj[eventName][i]();
				}
			}
		},
		remove:function(eventName,callback){
			if(this.obj[eventName]){
				for(var i = 0; i < this.obj[eventName].length; i++){
					if(this.obj[eventName][i]==callback){
						this.obj[eventName].splice(i,1);
					}
				}
			}
		}
	}
	
	
	
	
	4、组合模式
	组合模式又称部分-整体模式,将对象组合成树形结构以表示“部分整体”的层次结构。
	
	//新闻中心 文字新闻  图片新闻  视频新闻等等
	//订单系统  机票订单  住宿订单
			function TicketOrder(){
		
	}
	TicketOrder.prototype.create = function(){
		console.log("创建了机票订单");
	}
	
	function HotelOrder(){
		
	}
	HotelOrder.prototype.create = function(){
		console.log("创建了住宿订单");
	}
	
	function Orders(){
		this.orders = [];
	}
	
	Orders.prototype.addOrder = function(order){
		this.orders.push(order);
		return this;
	}
	
	Orders.prototype.create = function(){
		for(var i = 0; i < this.orders.length; i++){
			this.orders[i].create();
		}
	}
	
	var orders = new Orders();
	orders.addOrder(new TicketOrder()).addOrder(new TicketOrder()).addOrder(new HotelOrder());
	orders.create();