JQuery源码分析之—— 整体构架

这节我整理了一下,JQuery的整体构架。
一、打开JQ 2.0.3 我们首先看到的是 一个匿名函数。
(function(window,undefind){

    // 代码处理

})(window,undefind)

匿名函数不用过多解释,防止污染全局变量
这里说明一下传递window 和 undefind 的作用

传递window:
1.window是最顶层,做为参数方便查找,提高查询速度。
2. 代码压缩时可以,进行压缩(比如,可以将window 简写为 w)

传递undefind:
1.undefind 是可以被修改的 (例如 undefind = 10 在某些浏览器下,如ie7 8下就可一个被修改)
2. 代码压缩时可以,进行压缩

查看jquery-2.0.3 压缩版本可以看出:
这里写图片描述

二、架构

1.我们平常利用构造函数封住时,可以这样写

function person(){
}
person.prototype.init = function(){} // 初始化
person.prototype.eatting = function(){}

//调用
var newPerson = new person();
newPerson.init(); // 执行初始化
newPerson.eatting();

但是我们在使用jq 时,我们经常这样调用:

$().show(), JQuery().css()

我们可以看到jq并没有先执行显示的初始化(如上面的 newPerson.init();

当然jq 并不是没有初始化,而是这样调用的:

也就是等同与上面的:

function person(){
  return person.prototype.init();
}
person.prototype.init = function(){} // 初始化
person.prototype.eatting = function(){}

//调用
var newPerson = new person();
newPerson().eatting();  // 这里newPerson() 就直接初始化了,就像$()一样

但是像上面那样调用有一个问题,方法eatting() 并没有在init() 方法上,而是在person 的原型上,newPerson().eatting() 又是怎样被调用的呢。
JQ是这样处理的:
这里写图片描述

这里 JQuery.fn 中的fn 就是 prototype,也就是:

JQuery.prototype.init.prototype = JQuery.prototype
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值