为了账号安全,请及时绑定邮箱和手机立即绑定

对象模式

标签:
AngularJS


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的原创作品,如需转载,请注明出处,否则将追究法律责任


点击查看更多内容
TA 点赞

若觉得本文不错,就分享一下吧!

评论

作者其他优质文章

正在加载中
  • 推荐
  • 评论
  • 收藏
  • 共同学习,写下你的评论
感谢您的支持,我会继续努力的~
扫码打赏,你说多少就多少
赞赏金额会直接到老师账户
支付方式
打开微信扫一扫,即可进行扫码打赏哦
今天注册有机会得

100积分直接送

付费专栏免费学

大额优惠券免费领

立即参与 放弃机会
意见反馈 帮助中心 APP下载
官方微信

举报

0/150
提交
取消