美文网首页
jquery的load和ready

jquery的load和ready

作者: 巨佬的搬运工 | 来源:发表于2019-05-20 23:30 被阅读0次

$(Doc).ready  是 在dom树解析完毕时执行 此时的dom树节点的内联元素可能还没有下载好,如图片

$(Doc).load === window.onload  在dom树加载完毕时执行

window.onload 只能有一个(覆盖)  ready可以有多个


jQuery对象不能调用DOM对象的成员(属性和方法)



阅读了前300行的jq源码 

虽然看的云里雾里 但是感觉用了好多三目运算符 简化了许多判断的代码

而且实现的功能很系统,dom节点和jq对象是独立的。

用extend函数来说

    他传参第一个是target  第二个是option  

    如果没有target,那么就会把this(也就是jq对象)作为target  来整合两个对象的方法    

if ( typeof target === "boolean" ) {        

        deep = target;

        // skip the boolean and the target

        target = arguments[ i ] || {};//target是被合并的目标对象

        i++;

    }

    // Handle case when target is a string or something (possible in deep copy)

    if ( typeof target !== "object" && !jQuery.isFunction( target ) ) {target = {};}

    // extend jQuery itself if only one argument is passed

    if ( i === length ) {  //如果i等于2的话 就只有 target 和 obj【1】两个参数  这样会吧obj和jq对象合并  由此为jq对象添加方法

        target = this;//this === jq对象

        i--;

    }


    for ( ; i < length; i++ ) {// i 已经被赋值 不用初始化

        //遍历传参列表?

        // Only deal with non-null/undefined values

        if ( ( options = arguments[ i ] ) != null ) {

            // Extend the base object

            for ( name in options ) {

                src = target[ name ];//src是原有对象的方法

                copy = options[ name ];//copy是新对象的方法

                // Prevent never-ending loop  //????

                if ( target === copy ) {

                    continue;

                }//避免死循环

                // Recurse if we're merging plain objects or arrays

                if ( deep

                     &&

                     copy

                     &&

                     ( jQuery.isPlainObject( copy ) //判断是否是纯粹的对象 {} new Object 创建

                     ||

                     ( copyIsArray = jQuery.isArray( copy ) ) ) )

                     {

                        if ( copyIsArray ) {

                            copyIsArray = false;

                            clone = src && jQuery.isArray( src ) ? src : [];

                        } else {

                            clone = src && jQuery.isPlainObject( src ) ? src : {};

                        }

                    // Never move original objects, clone them    !

                    //这个很重要  因为jq不会改变原生的对象 从来都是clone  这个体现了jq的封装性?独立性?

                    target[ name ] = jQuery.extend( deep, clone, copy );

                // Don't bring in undefined values

                } else if ( copy !== undefined ) {

                    target[ name ] = copy;

                }

            }

        }

    }

    // Return the modified object

    return target;

};

分析的如此没有深度。。。

相关文章

网友评论

      本文标题:jquery的load和ready

      本文链接:https://www.haomeiwen.com/subject/etrlzqtx.html