• JQuery源码解析-JQuery的工具方法(1)


    在jQuery内部,所有的工具方法都是通过extend方法继承到jQuery中的。

    产生jQuery的随机数

    // Unique for each copy of jQuery on the page
        expando: "jQuery" + ( core_version + Math.random() ).replace( /D/g, "" ),

    可以看到expando这个属性每次进行访问都是不同的值,在jQuery内部,有时会需要一个唯一的随机串来进行区分,例如缓存方法,ajax方法等。

    noConflict方法

    这个方法主要是用来防止冲突,有时在页面中可能引入了多种框架,那就无法避免在其他框架中对$符号的占用,所以这个方法就起到了作用。

    如:

       var $ = "aaa";
       $(function () { })

    这样运行之后,页面中一定会报错,因为$符号被重新赋值了,这时候就要用noConflict方法来解决这个问题

         var jQ = $.noConflict();
            var $ = "aaa";
            jQ(function () {
                alert(1);
            })

    这个方法内部重新返回一个jQuery的对象,一会看源码的时候就可以看到

    除了这种情况还有一种情况,那就是将$符号在引用jQuery库之前进行赋值,那在引用jQuery库的时候,$符号就会被重新进行赋值,所以$符号的值正常来说就已经丢失了,好在jQuery已经对这种情况进行了处理:

    <script>
            var $ = "aaa";
    </script>
     <script src="jquery-2.0.3.js"></script>
    <script>
            var jQ = $.noConflict();
            jQ(function () {
                alert($);
            })
    
        </script>

    运行可以看到$符号的值"aaa"是可以被弹出的。

    这个方法还有一个参数,这个参数是一个bool值,如果传入的值为true的话,就代表对jQuery进行弃用,例如:

     <script>
            var jQuery = "aaa";
        </script>
    
        <script src="jquery-2.0.3.js"></script>
    
        <script>
            var jQ = $.noConflict();
            jQ(function () {
                alert(jQuery);
            })
    
        </script>

    运行结果是弹出jQuery对象,并没有弹出aaa,所以这个时候如果传入true

      var jQ = $.noConflict(true);

    这个时候就可以将aaa正常弹出了。

    下面来看一下源码,源码非常简单:

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

    首先判断挂载到window上的$符号是否和jQuery相等,如果一致,则将_$符号重新对window上的$符进行覆盖,前面说过,在源码的38 和41行分别对这两个变量进行赋值。

    第二个条件,如果传入的为true,则将_jQuery覆盖到window上的jQuery对象。

    最好放jQuery对象,也就是:

     var jQ = $.noConflict(true);

    这句话,其实不管var定义的什么,其实都是jQuery对象。

  • 相关阅读:
    表观遗传学|
    Mutation|DNM|
    Right journal|First-class paper|Mediocre paper|figure legend |Discussion|Introduction
    PCoA|NMDS|STRESS|RDA |RA|Unimodal|CCA|Generalized Joint Attribute Modeling
    缺失值|回归分析|协变关系|
    基金写作流程|留学回国人员启动资金
    nexage video asset tag
    获取的时候报cannot find package "golang.org /x/net/context",编译也报错误
    google play apk 下载
    vim golang 插件
  • 原文地址:https://www.cnblogs.com/y8932809/p/5867305.html
Copyright © 2020-2023  润新知