$(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;
};
分析的如此没有深度。。。
网友评论