当一个页面需要引入两个不同的js库,如果它们挂载在window对象下的全局变量命名相同,就会产生命名冲突。
为了解决这个问题,像jQuery库就提供了noConflict()方法来处理,实现思路如下:
var $ = '$'; //初始全局变量$ (假设这是第一个库,挂载在window对象下的全局变量名为$)
//封装一个命名空间为jQuery的库 (假设这是第二个库,挂载在window对象下的全局变量名也为$)
(function(window){
var _$ = window.$; //把全局变量$初始值保存到局部变量_$
var jQuery = {}; //定义一个名为jQuery的对象
jQuery.noConflict = function(){ //给jQuery对象增加一个解决命名冲突的方法
if(window.$ == jQuery){
window.$ = _$; //恢复全局变量$的初始值
}
return jQuery; //返回jQuery对象
};
window.$ = window.jQuery = jQuery; //把jQuery对象挂载到全局变量$上
})(window);
console.log($ == '$'); //false
var myjQuery = $.noConflict(); //调用此方法把全局变量$还原为初始值,把返回值jQuery对象赋值给全局变量myjQuery
console.log($ == '$'); //true