JS设计模式(链式编程):模拟jQuery底层链式编程

本文通过模拟jQuery底层实现,展示了如何使用JavaScript进行链式编程。文章详细解释了块级作用域的特点,并通过具体示例说明如何创建链式调用的方法。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

<!DOCTYPE html>
<html>
<head>
    <title>JS设计模式(链式编程):模拟jQuery底层链式编程</title>
    <script type="text/javascript">
    </script>
</head>
<body>
    <input id="inp" type="button" value="点击我" />


    <script type="text/javascript" charset="utf-8">
    // 模拟jquery底层链式编程 
        
        // 块级作用域
        //特点1  程序启动的时候  里面的代码直接执行了
        //alert('我执行了');
        //特点2 内部的成员变量 外部无法去访问 (除了不加var修饰的变量)
        //a = 10 ;              
        (function(window , undefined){
            // $ 最常用的对象 返回给外界 大型程序开发 一般使用'_'作为私用的对象(规范)
            function _$(arguments){
                //实现代码...
                // 正则表达式匹配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 !');
                }
            };
            
            // 在Function类上扩展一个可以实现链式编程的方法
            Function.prototype.method = function(methodName , fn){
                this.prototype[methodName] = fn ;
                return this ; //链式编程的关键
            }
            
            // 在_$的原型对象上 加一些公共的方法
            _$.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 ;
                }
            };
            
            
             // window 上先注册一个全局变量 与外界产生关系
            window.$ = _$ ;
            // 写一个准备的方法
            _$.onReady = function(fn){ 
                // 1 实例化出来_$对象 真正的注册到window上
                window.$ = function(){
                    return new _$(arguments);
                };
                // 2 执行传入进来的代码
                fn();
                // 3 实现链式编程
                _$.method('addEvent',function(){
                    // nothing to do
                }).method('setStyle',function(){
                    // nothing to do
                });
                 
            };
            
        })(window); // 程序的入口 window传入作用域中
                  
        
        
        
            
        $.onReady(function(){
            var inp = $('#inp');
            //alert(inp.dom.nodeName);
            //alert($('#inp'));
            inp.addEvent('click',function(){
                alert('我被点击了!');
            }).setStyle('backgroundColor' , 'red');
        });


    </script>


</body>
</html>
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值