是否需要jquery插件中的命名空间?

时间:2014-02-11 16:33:30

标签: javascript jquery jquery-plugins namespaces

我最喜欢的创建jQuery插件的设计模式如下所示。

是否有任何理由为插件中的方法创建命名空间?具体来说,我使用下面显示的var privateMethods

(function($){
    var privateMethods={};
    privateMethods.method1=function(){alert('privateMethods1');};
    privateMethods.method2=function(){alert('privateMethods2');};
    privateMethods.method3=function(){alert('privateMethods3');};

    var privateMethod1=function(){alert('privateMethods1');};
    var privateMethod2=function(){alert('privateMethods2');};
    var privateMethod3=function(){alert('privateMethods3');};

    function privateFunction1(){
        //Consider using this approach if there is significant script
        alert('privateFunction1');
    }

    var defaults = {    //private, right?
        foo: 'bar'
    };

    var methods = {
        init : function (options) {
            var settings = $.extend({}, defaults, options);
            return this.each(function () {
                //do whatever
            });
        },
        destroy : function () {
            return this.each(function () {});
        },
        otherPublicMethod : function() {
            return $(this).each(function(){
                //do whatever
            })
        }
    };

    $.fn.myPlugin = function(method) {
        if (methods[method]) {
            return methods[method].apply(this, Array.prototype.slice.call(arguments, 1));
        } else if (typeof method === 'object' || ! method) {
            return methods.init.apply(this, arguments);
        } else {
            $.error('Method ' +  method + ' does not exist on jQuery.myPlugin');
        }    
    };
    }(jQuery)
);

1 个答案:

答案 0 :(得分:0)

关于你的方法在插件范围之外的可见性,

之间没有区别
  • privateMethods.method
  • privateMethod1 = function(){}
  • function privateFunction(){}

另一方面,除了你的jQuery插件稍微大一点之外,命名空间没有任何严重的缺点(通过迷你和uglification你的代码可以轻松减轻)。可能的优势是:

的可能性
  • 通过将方法分解为命名空间组来为您的代码引入逻辑结构
  • 在命名空间周围使用众所周知的Javascript模式,使您的代码可读且易于维护,例如:http://addyosmani.com/blog/essential-js-namespacing/
  • 封装。与具有大量代码库的插件相关

总之:总的来说,我会选择随时使用命名空间。