先来分析第一部分定义的变量的格式:
——–
匿名函数自执行,为什么要把window,作为参数的形式传递过来?
1、(function( window, undefined ) {
这样写的目的:对于window来说,不传递这个参数也能执行。作用1,作为最顶端的变量,在执行和查找起来会比较麻烦,根据原型链的原理,从距离所属函数最近的部分开始查询,差找不到再往外层查找。对于window来说,将变量作为函数的参数传递过来,我们勉强把参数和局部变量看成是同一种概念,那么此时的参数就会覆盖前面我们定义的全局变量window,这样查询速度会快很多。
作用2:对于压缩版本来说,我们队window进行传参,那么这个时候可以把window修改成w,这样能能方便压缩版本的书写。
}(window)
对于上面的例子,我们对undefined的理解,先看下面的例子:
var undefined=10;
alert(undefiend); //ie7,ie8,谷歌下面弹10,ie10下面弹undefined。
从这个例子我们可以看出来,这个undefined其实在有些浏览器下面还是能够被修改的,于是我们为了防止undefined被在全局变量中被修改,我们把它作为参数放到匿名函数自执行中(原理还是先找到参数undefined然后才会去全局变量中寻找)。
———
“use strict” //强制浏览器在严格的模式下执行。
尽量不要使用,在火狐低版本会出现火狐假死的情况。对于.net和.asp下对于元素的跟踪会有影响。
————
定义的变量rootJquery, rootJquery=jquery(document);
这个时候用这个变量代替,便于后面的代码维护。
———–
用typeof判断undefined和 直接判断undefined的区别:
window.a == undefined
typeof window.a== undefiend //表示这个是保存字符串形式的undefined
我们看下面这个例子:
if (reValue== undefined)
{
alert(“undefined”);
}
var reValue;
if(typeof(reValue) == “undefined”){
alert(1);
}else{
alert(typeof(reValue));
}
typeof(reValue)返回的值是字符串的”undefined”.
这个时候执行alert(1)的值。用这种方法写的作用是:typeof(abc)返回的是这六种数据类型,这样判断更准确。
“number”, “string”,| “boolean”, “object” ,|”null”, 和 “undefined”。
location(获取网址信息)
docEleme(页面元素)
———
重头戏开始了:
jQuery = function (selector ,context){
return new jQuery.fn.init(selector,context,rootjQuery);
}
从最简单的面向对象进行分析:
function Aaa(){ }
Aaa.prototype.init = function(){ }
Aaa.prototype.css = function(){ }
var a1=new Aaa(); //初始化一个对象
a1.init();
a1.css();
/////////////////////////////////////
在jquery中演变成了这样:
function jquery(){
return new jQuery.prototype.init();
}
jQuery.prototype.init = function(){ }
jQuery.prototype.css = function(){ }
jQuery.prototype.init.prototype=jQuery.prototype;
jquery().css(); //这样等于是调用了jQuery.prototype.css()的方法。
暂时还不太懂他这样设计有什么好处。
———-
接下来是一些变量的定义:
例如:
rmsPrefix = /^-ms-/,
这是对ie的一段定义,平常我们写css3的时候经常会带一个内核的前缀,类似如此:
-webkit-margin-right -> webkieMarginRight
这是在我们的jq里面会进行这样的一个转换,但是在内核界有一个特殊的ms我们需要进行特殊的处理,就变成这样:
-ms-margin-right -> MsMarginRight
还有类似的正则例如rquickExpr对id值进行定义,并且防止location.hash的注入。
总之一句话:
这里就是对大量的变量进行定义,以备后面使用。
欢迎分享本文,转载请保留出处:前端ABC » jquery-2.0.1源码分析