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();
©著作权归作者所有:来自51CTO博客作者outsider96的原创作品,如需转载,请注明出处,否则将追究法律责任
共同学习,写下你的评论
评论加载中...
作者其他优质文章