jquery-2.0.1源码分析

先来分析第一部分定义的变量的格式:

——–

匿名函数自执行,为什么要把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源码分析

分享到:更多 ()

发表评论 0