【问题标题】:Is there a way to wrap a jquery function to an object?有没有办法将 jquery 函数包装到对象?
【发布时间】:2014-07-10 23:56:52
【问题描述】:

除了使用 main 函数之外,还有没有将 jquery 函数的范围限制为对象:

(function( $ ) {

    $.fn.myLib = function( funcName ) {

        if ( action === "func1") {
            // Open popup code.
        }

        if ( action === "func2" ) {
            // Close popup code.
        }

    };

}( jQuery ));

我想这样做,以便我可以调用这样的函数:

$(el).myLib.func1();
$(el).myLib.func2();

【问题讨论】:

    标签: javascript jquery function oop scope


    【解决方案1】:

    确实没有太多好的理由尝试这样做:

    $(el).myLib.func1();
    

    因为func1() 执行时的this 指针将是myLib,您将无法访问$(el)。所以,除非你想要的只是静态方法,否则它对你没有多大好处。如果那是你真正想要的,那么你可以这样做:

    $.fn.myLib = {};
    $.fn.myLib.func1 = function(...) {...};
    $.fn.myLib.func2 = function(...) {...};
    

    如果您确实希望能够访问 jQuery 对象(我认为是这样),那么请坚持一个级别并使用名称前缀,它可以为您提供大致相同级别的名称冲突保护。

    $.fn.myLibFunc1 = function(...) {...};
    $.fn.myLibFunc2 = function(...) {...};
    

    那么,你可以这样做:

    $(el).myLibFunc1();
    

    而且,myLibFunc1 中的 this 指针将是调用它的 jQuery 对象。

    【讨论】:

    • 是的,这就是我的目标(仍然能够访问“这个”)。我会坚持选择 (mylibFunc1();)
    【解决方案2】:
    (function( $ ) {
    $.fn.myLib = function( funcName ) {
       var obj=new Object
       obj.func1=function () {alert('first')}
       obj.func2=function () {alert('second')}
       return obj
    
    };
    }( jQuery ));
    

    【讨论】:

      猜你喜欢
      • 2012-10-11
      • 2017-01-30
      • 2011-04-24
      • 1970-01-01
      • 2019-06-16
      • 2011-11-02
      • 2017-05-11
      • 2023-01-03
      • 2020-12-31
      相关资源
      最近更新 更多