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相关)。