jQuery部分源码帮助理解

(function(window){})(window)

为什么要传window给jquery当参数呢?

1.为了压缩有 引用

2.加速变量的寻找,当找window对象的时候,默认从本级开始寻找,一级级往上到最高层。

 

window.a==undefined

typeof window.a "undefined" 理论上两种都行,但是在老版本的IE中上种可能不行

 

传统的js的面向对象构建方式

function A(){}

A.prototype.init=function(){}

A.prototype.css=function(){}

使用:

var a=new A();

a.init();

a.css();

是否很麻烦

jQuery的做法:

function jQuery(){

  return new jQuery.prototype.init();

}

jQuery.prototype.init=function(){}

jQuery.prototype.css=function(){}

jQuery.prototype.init.prototype=jQuery.prototype;//很巧妙,prototype首先是对象,也是型构造函数的原型

 

使用:

jQuery().css(); 直接省略了两步,被初始化了的

 

constructor属性,当创建一个js对象的时候,该对象自动有个 constructor属性,该属性就是构造方法

function A(){}

A.prototype.constructor=A;

当var a=new A()的时候,上面这句话自动会赋予的

可以 alert(a.constructor);试试 

 

为什么在 jQuery中 jQuery.fn=jQuery.prototype={......,constructior:jQuery,....}

这一句呢,不是说会自动添加上的么?

首先

function A(){}

A.prototype.name='ww'

A.prototype.age='11'

var a=new A();

alert(a.constructor);//打印出function A(){}

 

然后 function A(){}

A.prototype={name:'ww',age:'11'}

var a=new A();

alert(a.constructor)//打印出 function Object(){[native object]}

这是因为 第一种 是附加属性 不会影响 构造对象constructor

第二种是 = ,赋予属性而 json格式的 是一个大对象,所以 constructor对象被赋予 object了

写了那句话之后是为了修正,修正为函数形式的。

 

$("li") 转成的格式为

this:{0:li,1:li,2:li,length}

$.parseHTML()用于实现以上功能转成以上string

$.merge()  合并数组,也可以合并json(但是这个json是key是0,1等的。。。)。 把数组转换成 json

var str="<li>1</li><li>2</li><li>3</li><script>alert(4)<\/script>"

$.parseHTML(str,document,true);//返回数组,每个对象都是一个标签对象['li','li','li','script']

var arr={

  0:'a',

  1:'b'

  length:2}

vr arr2={'c','d'}

$.merge(arr,arr1)    ->{0:'a',1:'b',2:'c',3:'d',length:4}形式的json格式了。

$.makeArray() 生成数组

var div=$("div")

$.makeArray(div)生成 div的数组

$.makeArray()

深拷贝与浅拷贝

var a={}

var b={name:{age:30}}

a.name.age=20

$.extend(a,b)

alert(b.name.age)   打印出20    浅拷贝

 

$.extend(true,a,b)

a.name.age=20;

allert(b.name.age) 打印出30深拷贝,不同对象

posted on 2015-07-21 09:10  wf110  阅读(164)  评论(0编辑  收藏  举报