博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
jQuery源码分析之noConflict()
阅读量:6972 次
发布时间:2019-06-27

本文共 1400 字,大约阅读时间需要 4 分钟。

noConflict()

noConflict()将$或者jQuery的控制权让给第一个实现它的那个库,确保jQuery不会与其它库的$对象发生冲突。

jQuery中源码如下:

var _jQuery = window.jQuery,    _$ = window.$;jQuery.noConflict = function(deep){    if(window.$ === jQuery){        window.$ = _$;    }    if(deep && window.jQuery === jQuery){    window.jQuery = _jQuery;    }};

分析源码之前,我们应该注意几个点:

  • jQuery文件应该在其它冲突库文件之后导入;noConflict()必须在你导入jQuery文件之后使用;

  • 导致冲突的库中必须已经存在一个$或者jQuery的命名空间,否则_jQuery = window.jQuery_$ = window.$就没有意义了

下面开始分析源码:

假如我们引入了两个库,prototype.js和jQuery.js。prototype.js在前,jQuery.js在后,并且prototype.js中存在一个$的命名空间

//这句代码其实是在jQuery文件最开始的地方定义的,目的是保存prototype.js文件中的$或者jQuery命名空间var _jQuery = window.jQuery,_$ = window.$;jQuery.noConflict = function(deep){//这里判断如果当前的window.$已经被jQuery占用了,就把之前保存的prototype.js中的$的变量_$赋值给window.$进行覆盖    if(window.$ === jQuery){        window.$ = _$;    }    //这里判断如果deep为true并且当前的window.jQuery也已经被jQuery占用了,就把之前保存的prototype.js中的jQuery的变量_jQuery赋值给window.jQuery进行覆盖    if(deep && window.jQuery === jQuery){    window.jQuery = _jQuery;    }};

分析完上面的源码之后,这里有几个点要思考一下:

为什么调用noConflict()之后我们发现window.$已经等于jQuery了?

在jQuery代码最后有一段代码可以解释这个问题:

if ( typeof window === "object" && typeof window.document === "object" ) {    window.jQuery = window.$ = jQuery;}

如果prototype.js中没有冲突的命名空间,那调用noConflict()会怎么样么?

如果之前没有冲突的命名空间,那_&_jQuery都是undefined,所以window.$window.jQuery都会被undefined覆盖;也就是说,只要调用了noConflict(),jQuery就会交出$或者jQuery的控制权,无论之前有没有命名空间冲突

参考资料:

转载地址:http://ryosl.baihongyu.com/

你可能感兴趣的文章
springboot热部署
查看>>
MySQL学习(五) UNION与UNION ALL
查看>>
爬虫_淘宝(selenium)
查看>>
关于常用的web.xml、applicationContext.xml与springMVC-servlet.xml
查看>>
14、使用csv和excel存储豆瓣top250电影信息
查看>>
python Reload的准备知识
查看>>
autocomplete 之 ASP.NET
查看>>
Oracle数据库基础
查看>>
ArcGIS时态数据应用——动态展示台风中心轨迹
查看>>
Sql Server系列:排序函数
查看>>
windows平台vhd磁盘文件挂载
查看>>
白盒测试实践作业进度报告——Day 3
查看>>
基于Ubuntu16搭建Hadoop大数据完全分布式环境
查看>>
window环境下安装yii2
查看>>
exjs上传图片异常:com.jspsmart.upload.SmartUploadException: File can't be saved (1120).
查看>>
《c++不在难学--随老鸟快速通关》
查看>>
HipHop PHP
查看>>
非关系型数据库Redis学习(3)
查看>>
HPU 1437: 王小二的求值问题
查看>>
UE操作
查看>>