我最喜欢的创建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)
);
答案 0 :(得分:0)
关于你的方法在插件范围之外的可见性,
之间没有区别privateMethods.method
privateMethod1 = function(){}
function privateFunction(){}
另一方面,除了你的jQuery插件稍微大一点之外,命名空间没有任何严重的缺点(通过迷你和uglification你的代码可以轻松减轻)。可能的优势是:
的可能性总之:总的来说,我会选择随时使用命名空间。