jQuery中无冲突函数实现原理的分解
在jQuery中,noconflict是防止变量冲突和释放变量控制权的重要方法。我们知道,jQuery中有两个全局变量,$和jQuery。虽然jQuery只产生两个全局变量,但在极少数情况下会发生冲突。但是,如果网页包含更多的类库,并且有用户定义的$或jQuery全局变量,就会发生冲突。
jQuery提供的noconflict函数很好地解决了变量冲突的问题,无论是$还是jQuery冲突。接下来,我们将分析jQuery的冲突处理。
让我们来看看jQuery源代码中noconflict的实现:
(函数(窗口,未定义){var //在overwrite_jQuery=window.jQuery的情况下映射到jQuery上,//在overwrite_$=window的情况下映射到$上。$,jQuery.extend({noConflict:)函数(深度){ if (window。$===jQuery ) { window。$=_$;} if(deep window . jQuery===jQuery){ window . jQuery=_ jQuery;}返回jQuery}})}(窗口)这里的jQuery.extend是扩展jQuery静态属性的方法,可以看作是直接把noConflict方法附加到jQuery上。在匿名函数内部,定义了内部变量_jQuery和_ $来存储window.jQuery和window。$.这样做的目的是在jQuery运行之前,使用内部变量保存这两个全局变量的状态,以便在后续的反冲突操作中还原这两个变量。NoConflict可以处理$和jQuery之间的冲突,默认情况下处理$的冲突。如果传入一个真参数,jQuery之间的冲突将被处理。窗户。$===jQuery用于判断全局变量是否等于jQuery。如果是这样,在jQuery运行之前将全局变量$恢复到该变量(存储在内部变量_ $)中。Window.jQuery===jQuery当深度冲突处理打开并且全局变量jQuery等于内部jQuery时,全局jQuery恢复到以前的状态。判断窗口的意义。$===jQuery和window.jQuery=jQuery是为了保护定义的变量不被重写,如下面的代码所示:
//引入jQuery库var $=' Stringvar jq=jquery . noconflict();var jQuery='这是一行';var j=jq.noconflict(真);console . log($);//如果没有窗口的判断。$===这里的jQuery,$将等于undefined,而不是“String”。console . log(jQuery);//同上,如果没有判断window.jQuery===jQuery,则重新定义的jQuery会被未定义覆盖。整个操作过程如下图所示:
NoConflict返回jQuery库中的jQuery构造函数,所以尽可能多地使用它!
版权声明:jQuery中无冲突函数实现原理的分解是由宝哥软件园云端程序自动收集整理而来。如果本文侵犯了你的权益,请联系本站底部QQ或者邮箱删除。