不带括号的Javascript调用类(jQuery样式)

不带括号的Javascript调用类(jQuery样式),javascript,jquery,class,Javascript,Jquery,Class,我试图建立类似jQuery的库,只是为了学习。我让它工作得很好,我可以根据需要进行方法链接。我遇到的问题是能够使用类的括号调用方法: 我要做的是: $foo().get('id1'); 我想做的是: $foo.get('id1'); 以下是当前的javascript: (function( window ) { var document = window.document; var fooTools = (function() { var fooTools =

我试图建立类似jQuery的库,只是为了学习。我让它工作得很好,我可以根据需要进行方法链接。我遇到的问题是能够使用类的括号调用方法:

我要做的是:

$foo().get('id1');
我想做的是:

$foo.get('id1');
以下是当前的javascript:

(function( window ) {
    var document = window.document;
    var fooTools = (function() {
        var fooTools = function( selector ) {
            return new fooTools.base.init( selector );
        };

        fooTools.base = fooTools.prototype = {
            init: function( selector ) {
                if( !selector ) {
                    return this;
                } 
                if( selector ) {
                    this[0] = selector;
                        this.length = 1;
                        return this;
                }
            },

            get: function( id ) {
                return document.getElementById( id );
            },

            //..other methods

        };       
        fooTools.base.init.prototype = fooTools.base;
        return fooTools;    
    }());
    window.fooTools = window.$foo = fooTools;
}( window ));
目前它工作正常,但如果不包含括号,则会出现一个错误,即.get()方法不存在。我仍然希望保持对其他方法使用括号的能力,所以我只希望它是可选的。谢谢

变化:

window.fooTools = window.$foo = fooTools;
致:


编辑

更改:

window.fooTools = window.$foo = fooTools;
致:


编辑


然后您需要将
$foo
定义为函数以外的东西——现在您返回的是
fooTools
,这是一个函数,因此您需要调用它才能访问它公开的内容


(德拉特,他比我快了。)

然后你需要定义
$foo
为函数以外的东西——现在你要返回
fooTools
,这是一个函数,所以你需要调用它来访问它所公开的内容


(德拉特,他比我快。)

定义两种不同的方法,就像我们在jQuery中所做的那样

如果该方法需要括号,例如
$foo('id1').attr({…})
使用
$foo.prototype.method=function
定义它,否则,将其定义为
$foo
$foo.get=function(){…}

编辑:这实际上是基于IAbstract的答案


这将是
fooTools.prototype
而不是
$foo.prototype
,因为
fooTools
$foo
的一个实例类。

定义两种不同的方法,就像我们在jQuery中所做的那样

如果该方法需要括号,例如
$foo('id1').attr({…})
使用
$foo.prototype.method=function
定义它,否则,将其定义为
$foo
$foo.get=function(){…}

编辑:这实际上是基于IAbstract的答案


这将是
fooTools.prototype
而不是
$foo.prototype
,因为
fooTools
$foo
的一个实例。

这剥夺了我在需要时用括号括起来的能力,比如
$foo('id1')。attr({…})
@headpin见凯文的答案;这样你就可以同时做到这两个。这难道不是意味着我必须指定我想要的每个方法,以便能够像这样调用w/o括号吗?看来jQuery的工作方式更优雅一些。你知道怎么做吗?我正在看未压缩的版本,无法将我的头缠绕在它周围。他们正在做一些类似于
jQuery.extend=jQuery.fn.extend=function(){}
的事情,但我没有运气jQuery.fn实际上只是jQuery.prototype,所以本质上它与这种方法非常相似,这会剥夺我在需要时使用括号的能力,比如
$foo('id1').attr({…})
@headpin见凯文的答案;这样你就可以同时做到这两个。这难道不是意味着我必须指定我想要的每个方法,以便能够像这样调用w/o括号吗?看来jQuery的工作方式更优雅一些。你知道怎么做吗?我正在看未压缩的版本,无法将我的头缠绕在它周围。他们正在做类似于
jQuery.extend=jQuery.fn.extend=function(){}
的事情,但我没有运气jQuery.fn实际上只是jQuery.prototype,所以本质上它与这种方法非常相似
window.fooTools = fooTools;
window.$foo= fooTools;
window.$foo.get = fooTools.prototype.get;