对象模式

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();

转载于:https://blog.51cto.com/13570197/2325580

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值