javascript设计模式-(七)

惰性加载函数

在 Web 开发中,因为浏览器之间的实现差异,一些嗅探工作总是不可避免。比如我们需要 一个在各个浏览器中能够通用的事件绑定函数 addEvent

常见写法 一
    var addEvent = function(elem, type, handler) {
        if (window.addEventListener) {
            return elem.addEventListener(type, handler, false);
        } else if (window.attachEvent) {
            elem.attachEvent("on" + type, handler);
        }
    };
常见写法 二
    //在代码加载的时候就立刻进行一次判断,以便让 addEvent2 返回一个包裹了正确逻辑的函数,目前的 addEvent

    //函数依然有个缺点,也许我们从头到尾都没有使用过 addEvent2 函数,这样看来,前一次的浏览器嗅探就是完全

    //多余的操作,而且这也会稍稍延长页面 ready的时间

    var addEvent2 = (function() {
        if (window.addEventListener) {
            return function(elem, type, handler) {
                elem.addEventListener(type, handler, false);
            }
        } else if (window.attachEvent) {
            return function(elem, tye, handler) {
                elem.attachEvent("on" + type, handler);
            }
        }
    })();
常见写法 三 ( 惰性载入函数方案 )
    //惰性载入函数方案,第一次进入条件分支之后,在函数内部会重写这个函数,

    //重写之后的函数就是我们期望的 addEvent 函数,在下一次进入 addEvent3 

    //函数的时候, addEvent3函数里不再存在条件分支语句

    var addEvent3=function(){
        if(window.addEventListener){
            addEvent3=function(elem,type,handler){
                elem.addEventListener(type,handler,false);
            }
        }else if(window.attchEvent){
            addEvent3=function(elem,type,handler){
                elem.attachEvent("on"+type,handler);
            }
        }
    }

函数反柯里化(uncurring)

反curring就是把原来已经固定的参数或者this上下文等当作参数延迟到未来传递.

    Function.prototype.uncurring=function(){
        var self=this;//只调用这个方法的函数对象
        return function(){
            var obj=Array.prototype.shift.call(arguments);
            return self.apply(obj,arguments);
        }
    }

    var push=Array.prototype.push.uncurring();

    (function(){
        push(arguments,4);
        console.log(arguments);
    })(1,2,3);

转载于:https://www.cnblogs.com/hlere/p/6748743.html

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值