JS如何实现像jquery的链式调用

对jquery的调用方式很感兴趣,然后在网上找资料试着写了一个js代码,基本能实现jquery的链式调用,但是引用的时候发现和jquery还是差别很大,比如去掉字符串左右两边的空格,jquery是这样实现的$.trim(str),而我的代码必须是这样才可以$().trim(str),$后面要跟括号();
请教如何想jquery那样直接用$不加()?

代码:

<script>
(function(){
    function _$(obj){
        this._obj = document.getElementById(obj);
    }

    _$.prototype = {
        trim:function(str){//去掉字符窜左右空格
            return str.replace(/(^\s*)|(\s*$)/g,'');
        },
        
        text:function(str){//获取innerText
            return this._obj.innerText;
        }
        
    }

    window.$ = function(obj){
        return new _$(obj);
    }
})();

alert($().trim('  空格  '));

//jquery代码 alert($.trim('  空格  '));
</script>

感谢LionKissDeer回复,

window.$ = (function(obj){
  return new _$(obj);
})();

改动之后

alert($.trim(' 空格 '));

这个解决,是我需要的,但是:

<div id="aa">内容</div>

alert($('aa').text());

这样代码出现问题

阅读 5.4k
3 个回答

@LionKissDeer 所提到的,不同用户的函数放在不同的地方

(function(){
    function _$(obj){
        this._obj = document.getElementById(obj);
    }
    _$.prototype = {
        text:function(str){//获取innerText
            return this._obj.innerText;
        }

    };

    //将工具类放在fn这个对象下
    _$.fn={};
    _$.fn.trim=function(str){//去掉字符窜左右空格
        return str.replace(/(^\s*)|(\s*$)/g,'');
    };
    
    var $;
    window.$=$=function(obj){
        return new _$(obj);
    };
    //将_$.fn下的属性复制到$下
    for(var prop in _$.fn){
        $[prop]=_$.fn[prop];
    }
})();

console.log($.trim(' 空格 '));

如果只针对你现在的代码的话:

window.$ = (function(obj){
  return new _$(obj);
})();

然后就可以:

alert($.trim('  空格  '));

补充对于全局方法应该:

$.trim = function() {} // 函数实现

// ...

alert($.trim('  空格  '));

而不是把他放在prototype下。

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题
宣传栏