jquery.noConflict源码分析

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了jquery.noConflict源码分析相关的知识,希望对你有一定的参考价值。

代码位于9159~9183

该功能是为了解决JQ与其他函数命名冲突的问题。

 

API  jQuery.noConflict([removeAll]);

缺省情况下,运行这个函数将变量$的控制权让渡给第一个实现它的库。在运行完这个函数之后,就只能使用jQuery变量访问jQuery对象。

该函数必须在导入jQuery文件之后,并且在导入另一个导致冲突的库之前使用。

 

var
	// Map over jQuery in case of overwrite
	_jQuery = window.jQuery,  //将jQuery挂载到Windows对象下

	// Map over the $ in case of overwrite
	_$ = window.$;       //将$挂载到Windows对象下

//设置别名通过两个私有变量映射了window环境下的jQuery和$两个对象,以防止变量被强行覆盖,一旦noConflict被调用,jquery可以通过_jQuery,_$,jQuery,$四者之间的差异,来决定控制权的移交方式。
jQuery.noConflict = function( deep ) { //通过调用noConflict()方法让出变量$的jQuery控制权,这样其他脚本就可以使用$符号了。 if ( window.$ === jQuery ) { //如果deep没有设置,_$覆盖window.$,此时jQuery的别名$失效了,但是jQuery变量未失效,仍可使用。此时如果其他其他库定义了$变量的话,$控制权就被转交了出去 window.$ = _$; } if ( deep && window.jQuery === jQuery ) { window.jQuery = _jQuery;  //当deep设置为true时,_jQuery进一步覆盖window.jQuery,此时$和jQuery都将失效。 } return jQuery; }; // Expose jQuery and $ identifiers, even in // AMD (#7102#comment:10, https://github.com/jquery/jquery/pull/557) // and CommonJS for browser emulators (#13566) if ( typeof noGlobal === strundefined ) { // var strundefined = typeof undefined window.jQuery = window.$ = jQuery;
//在自调用的匿名函数里面,定义了一个jQuery变量,它是一个方法,执行后返回一个新jQuery对象,不过这个对象实际上是由jQuery.fn.init函数构建。在整个jQuery主体代码的最后会让window.jQuery和window.$两个全局变量引用这个jQuery方法: }

 

以上是关于jquery.noConflict源码分析的主要内容,如果未能解决你的问题,请参考以下文章

如何实现 JQuery.noConflict() ?

jquery noConflict详解

Mailchimp 的 $mcj = jQuery.noConflict(true) 导致冲突

jQuery名称冲突

jquery noConflict()

jQuery.noConflict( )