13行 --window.undefined = window.undefined;–为了兼容ie5前的老版浏览区,老版本没有window.undefinde
没有设定找的话window.undefinde就是undefinded值,再把这个undefinded值复制给window的子对象unfdeinfded,然后window={undefinded:undefinded}
核心函数each ,extend,每次给原型jQuery.fn添加(extend)属性的都会用到
extend函数
jQuery.extend = jQuery.fn.extend = function(obj,prop) {
if ( !prop ) { prop = obj; obj = this; }
for ( var i in prop ) obj[i] = prop[i];
return obj;
};
参数obj,prop obj就是传入的对象,第二个参数暂时没用到,后面使用都是传入一个对象,应该是供它内部使用,这段代码的意思是 如果第二个参数为空,prop(英文支撑物,支撑)这里应该是添加的意思
prop = obj obj传入的对象参数变成prop要添加的对象,
obj=this this是指向调佣这个函数的对象 后面都是obj指向jQuery和jQuery.fn
for那段 用i遍历要添加对象的属性 i变成了传入参数的的属性值
obj[i] = prop[i] 把传入对象的属性添加到jQuery和jQuery.fn(原型)上然后把传入对象的值赋值给jQuery和原型上
给了个返回值 后面执行都是返回jQuery或者原型
总的来说就是遍历传入参数对象的属性,把传入对象的属性添加的jQuery和原型上并且 属性的值就是传入对象的值
这是原型上each
each: function( fn, args ) {
return jQuery.each( this, fn, args );
},
这个调用方法$('div).each(function)
这里的this就是div 对应的就是下面的obj,返回值就是div
each函数–这个是jQuery里的each
each: function( obj, fn, args ) {
if ( obj.length == undefined )
for ( var i in obj )
fn.apply( obj[i], args || [i, obj[i]] );
else
for ( var i = 0; i < obj.length; i++ )
fn.apply( obj[i], args || [i, obj[i]] );
return obj;
}
each这个函数if里的是如果传入的对象没有length这个属性和有length属性 两种情况进行操作
这里面obj-对象 fn–执行的函数,args—传入的第三个参数,我看着后面基本没用这个
没有length属性时 用i遍历obj对象,i变成了obj对象的属性名,
然后fn.apply 把传入的执行函数给这个obj[i](–属性值这里叫子对象好点–)
[i,obj[i]] 然后把i属性名和obj[i]属性值给fn执行函数作为第一个参数和第二个参数
这上面的对象针对 {width:20,height:30,user:“李四”}
然后函数fn(a,b,c)里的a就变成了width,b变成了20,只有c才算是它fn自己创建的的参数,前面两个已经记录了值
如果有length—针对 {0:width,1:height,length:2}
也是把obj对象的属性名 和属性值给fn作为第一个或第二个参数,并且执行fn
给了个返回值obj 对象本身