Javascript调用类没有括号(jQuery样式)

时间:2011-10-21 15:24:32

标签: javascript jquery class

我正在尝试像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()方法不存在。我仍然希望保持对其他方法使用括号的能力,所以我只想要它是可选的。谢谢!

3 个答案:

答案 0 :(得分:3)

变化:

window.fooTools = window.$foo = fooTools;

为:

window.$foo = new fooTools();
window.fooTools = fooTools;

Live Example


修改

window.fooTools = fooTools;
window.$foo= fooTools;
window.$foo.get = fooTools.prototype.get;

Updated Example

答案 1 :(得分:2)

定义两种不同类型的方法,就像我们在jQuery中一样。

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

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

fooTools.prototype不是$foo.prototype,因为fooTools$foo是其实例的类。

答案 2 :(得分:1)

然后你需要将$foo定义为函数以外的东西 - 现在你正在返回fooTools这是一个函数,所以你需要调用它才能访问它暴露。

(Drat,他打败了我。)