js的36个设计模式:结构型模式

1.外观模式

(1)在对页面dom绑定原生点击事件的时候,dom2级会覆盖dom0级的操作;IE9不兼容addEventListener,而不支持dom2级的浏览器,又只能用dom0级的onclick。外观模式可以把一些兼容方法或者复杂的方法简化。

function addEvent(dom,type,fn){
    //dom2
    if(dom.addEventListener){
        dom.addEventListener(type,fn,false);
        //不支持dom2的浏览器
    }else if(dom.attachEvent){
        dom.attachEvent("on" + type,fn);
        //都不支持的老浏览器
    }else{
        dom["on" + type] = fn;
    }
};

(2)把复杂的方法简化

var A = {
    css:function(id,key,value){
        document.getElementById(id).style[key] = value;
    },
    attr:function(id,key,value){
        document.getElementById(id)[key] = value;
    }
};
A.css("box","color","#fff");

2.适配器模式

(1)框架适配器
比如说。。window.A = A = jQuery;
简单的适配了jQuery框架和A框架,可以同时用A来使用两个框架的方法。如果A框架有重写jQuery的方法的话,则会执行A框架。
(2)参数适配,数据适配,其实就是把一个数据格式通过函数转化成另一种格式。。

var arr = ["js模式","2016-12-13","baishiup"];
function arrToINeed(arr){
    retirn {
        title:arr[0],
        date:arr[1],
        username:arr[2]
    }
}

3.代理模式

跨域这方面的吧。。这个先不细看

4.装饰者模式

装饰旧方法。修改历史代码的时候,可以用装饰者模式,在不修改原有代码的基础上,对旧代码的事件进行修改。

var con = document.getElementById("con");
    con.onclick = function () {
        console.log("old fun");
    };

    var de = function (id, fn) {
        var dom = document.getElementById(id);
        //如果该DOM已有绑定事件
        if (typeof dom.onclick === "function") {
            var oldFun = dom.onclick;
            //绑定新事件
            dom.onclick = function(){
                //执行老事件
                oldFun();
                //执行新绑定事件
                fn();
            }
        }else{
            //如果该DOM没有绑定事件,直接为dom添加事件
            dom.onclick = fn;
        }
    };
    de("con", function () {
        console.log("new fun");
    })

5.桥接模式

类似中间件函数。

function change(dom,color,gb){
    dom.style.color = color;
    dom.style.background = db;
};

var spans = document.getElementByTagName('span');
spans[0].onclick = function(){
    change(this,"#333","#f4f4f4");
}

6.组合模式

跳过

7.享元模式

实现类似分页的效果

var fw = function(){
    var created = [];
    function create(){
        var dom = document.createElement('div');
        document.getElementById("con").appendChild(dom);
        created.push(dom);
        return dom;
    };
    return {
        getDiv:function(){
            if(created.length > 5){
                return create();
            }else{
                var div = created.shift();
                created.push(div);
                return div;
            }
        }
    }
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值