js设计模式--链式调用

<!DOCTYPE html>
<html lang="en">
<head>
  <meta charset="UTF-8">
  <meta http-equiv="x-ua-compatible" content="ie=edge">

  <title>测试js设计模式--链式调用</title>
</head>
<body>
  <div id="b1">测试js设计模式--链式调用</div>
<script>
(function(window , undefined){
    // $ 最常用的对象 返回给外界 大型程序开发 一般使用'_'作为私用的对象(规范)
    function _$(arguments){
        //实现代码...这里仅实现ID选择器
        // 正则表达式匹配id选择器
        var idselector = /#\w+/ ;
        this.dom ;      // 此属性 接受所得到的元素
        // 如果匹配成功 则接受dom元素   arguments[0] = '#inp'
        if(idselector.test(arguments[0])){
            this.dom = document.getElementById(arguments[0].substring(1));
        } else {
            throw new Error(' arguments is error !');
        }
    };



    // 在_$的原型对象上 加一些公共的方法
    _$.prototype = {
        constructor : _$ ,
        addEvent:function(type,fn){
            // 给你的得到的元素 注册事件
            if(window.addEventListener){// FF 
                this.dom.addEventListener(type , fn);
            } else if (window.attachEvent){// IE
                this.dom.attachEvent('on'+type , fn);
            }
            return this ; 
        },
        setStyle:function(prop , val){
            this.dom.style[prop] = val ;
            return this ;
        }
    };

    // 写一个准备的方法
    _$.onReady = function(fn){ 
        // 1 实例化出来_$对象 真正的注册到window上
        window.$2 = function(){
            return new _$(arguments);
        };

        // 2 执行传入进来的代码
        fn();

    };

    // window 上先注册一个全局变量 与外界产生关系
    window.$2 = _$ ;

})(window);



$2.onReady(function(){
    var inp = $2('#b1');
    inp.addEvent('click',function(){
        alert('我被点击了!');
    }).setStyle('color' , 'red');
});
</script>
  </body>
</html>

使用回调函数从支持链式调用的方法获取数据

链式调用很适合于赋值器方法,但对于取值器方法,就不方便了,因为每个方法返回的都是this啊。

不过,变通的方法还是有的,那就是回调函数。

window.API2 = window.API2 || function(){
    var name = 'JChen';
    this.setName = function(newName){
        name = newName;
        return this;
    };
    this.getName = function(callback){
        callback.call(this, name);
        return this;
    };
};
var o2 = new API2();
var log = function(para){
    console.log(para);
};
o2.getName(log).setName('Hehe').getName(log);

输出结果:
JChen
Hehe

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

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值