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源码分析的主要内容,如果未能解决你的问题,请参考以下文章