JavaScript命名空间与jQuery
如何管理自定义JavaScript库的命名空间依赖于jQuery?
你创建自己的命名空间,比如说foo
并在那里添加你的对象吗? 例如foo.myClass, foo.myFunction
或者您将对象添加到jQuery的命名空间? 例如jQuery.myClass, jQuery.myFunction
哪种更常见的做法以及为什么?
这取决于图书馆的作用。
-
如果你正在扩展jQuery对象实例的function,你可以使用
jQuery.fn
正如@David Titarenco在他的回答中所描述的那样 。 -
如果你正在创建那些被视为
window.jQuery
提供的实用程序的实用程序,那么我没有看到使用该命名空间的问题(只要你小心命名)。 -
如果它真的是它自己独立的库, 不应该被视为jQuery的扩展,但依赖于jQuery的function,那么绝对使用你自己的命名空间。
本文讨论编写jQuery插件/库的难以理解的细节。
什么不该做:
(function( $ ){ $.fn.tooltip = function( options ) { // THIS }; $.fn.tooltipShow = function( ) { // IS }; $.fn.tooltipHide = function( ) { // BAD }; $.fn.tooltipUpdate = function( content ) { // !!! }; })( jQuery );
该怎么办:
(function( $ ){ var methods = { init : function( options ) { // THIS }, show : function( ) { // IS }, hide : function( ) { // GOOD }, update : function( content ) { // !!! } }; $.fn.tooltip = function( method ) { // Method calling logic 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.tooltip' ); } }; })( jQuery );
去年我还写了一篇关于JavaScript中命名空间的各种方法的博客文章 (非jQuery相关)。