浅析jQuery框架与构造对象

这是一些分析jQuery框架的文字    面向的读者应具备以下要求

1.非常熟悉HTML

2.非常熟悉javascript语法知识

3.熟悉javascript面向对象方面的知识

4.熟练使用jQuery框架

言归正传!

jQuery对象的初始化是写在匿名函数里的

就像这样:

(function(){alert("jQuery框架分析")})();

第一个括号是声明了一个函数,第二个括号是执行这个函数。也就是说,jQuery框架在页面载入的时候已经做了一些事情(这个个匿名函数已经被执行了)。做的这些事情使我们可以通过$("#yourId")或$(".yourClass")等方式获取页面元素,并把获取到的元素包装成jQuery对象。

匿名函数是怎么实现这些功能的呢?

首先框架定义了两个核心对象

jQuery = window.jQuery = window.$ = function( selector, context ) {}

一个是jQuery

一个是$

这两个对象都指向一个函数

这个函数是我们使用$()或jQuery()方法时的入口,这个方法返回一个jQuery.fn.init( selector, context );的实例,其实这个实例是一个jQuery对象。

jQuery对象是一个什么样的对象呢?

jQuery对象其实是一个javascript的数组

这个数组对象包含125个方法和4个属性

4个属性分别是

jQuery     当前的jQuery框架版本号

length     指示该数组对象的元素个数

context    一般情况下都是指向HtmlDocument对象

selector   传递进来的选择器内容  如:#yourId或。yourClass等

如果你通过$("#yourId")方法获取jQuery对象,并且你的页面中只有一个id为yourId的元素那么$("#yourId")[0]就是HtmlElement元素与document.getElementById("yourId")获取的元素是一样的

jQuery对象是怎么构造出来的呢?

这个对象就是刚才我们提到的

jQuery = window.jQuery = window.$ = function( selector, context ) {}

框架不只为此对象定义了一个方法,还定义了它的原型(prototype)

jQueryjQuery.fn = jQuery.prototype = {//此处为json对象}

原型的定义是通过json对象定义的

{

init: function( selector, context ) {//方法体},

jQuery: "1.3.2",//属性

size: function() {//方法体},

//……

}

前面提到的125个方法4个属性有一部分在这个json对象中完成定义的 这个json对象中第一个方法就是init方法也就是入口方法中的jQuery.fn.init( selector, context );此方法与一个正则表达式对象配合来构造jQuery对象

这个正则表达式为:

quickExpr = /^[^<]*(<(。|\s)+>)[^>]*$|^#([\w-]+)$/

下面我们说一下init方法的实现逻辑

此方法有两个参数

一个是selector(选择器)

一个是context(上下文)

selector就是我们用$("#yourId")或jQuery(".yourClass")传递进来的变量

这个参数不一定是字符串,也可能是其他形式的变量

等会儿我们就会介绍到

context参数我们在使用jQuery的时候很少用到,暂且不表

注意这两个参数都在返回的jQuery对象中体现出来了(以两个同名的属性展示)

下面看一下这个方法体内部的实现逻辑

  //如果没有选择器或者选择器为空的话,就把document对象赋值给他
selector = selector || document;
//如果selector参数是dom元素,直接返回jQuery对象
//也就是说你可以$(document.getElementById("allen"))把你的元素封装成jQuery对象
if ( selector.nodeType ) {
this[0] = selector;
this.length = 1;
this.context = selector;
return this;
}
//typeof 取对象的类型,用三个等号效率较高, 不需要类型转换,两个等号默认有类型转换
if ( typeof selector === "string" ) {
//这里用到了我们前面提到的正则表达式quickExpr
//match其实是一个数组
//第0个元素是与正则表达式相匹配的文本
//第1个元素是与正则表达式的第1个子表达式相匹配的文本(如果有的话)
//第2个元素是第2个子表达式相匹配的文本(如果有的话)
//第3个元素是第3个子表达式相匹配的文本(如果有的话)这里就是元素的ID,不包含#
var match = quickExpr.exec( selector );
//正则表达式匹配到了内容   并且 match[1]不为空 或者 context为空
//match[1]不为空的时候selector是HTML字符串,也就是你可以用$("
xland
")把对象包装成jQuery对象
//context为空的时候selector是页面元素ID
if ( match && (match[1] || !context) ) {
 //选择器为html字符串  此情况暂且不表
if ( match[1] ){
selector = jQuery.clean( [ match[1] ], context );}
//选择器为ID
else {
//得到元素
var elem = document.getElementById( match[3] );
 //如果得到了这个元素但是元素的ID属性不是match[3],跳入分支。分支里面的东西做了什么工作,暂且不表
if ( elem && elem.id != match[3] ){
return jQuery().find( selector );}
//把得到的页面元素封装成jQuery对象
//如果elem为空,就传入一个空数组,框架怎么处理此空数组,暂且不表
//如果不为空就跳入我们前面说的if ( selector.nodeType )分支,构造出jQuery对象来
var ret = jQuery( elem || [] );
 //设置jQuery对象的context属性
ret.context = document;
 //设置jQuery对象的selector属性
ret.selector = selector;
 //返回这个对象给调用者
return ret;
}

至此

var obj = $(“#yourId”);

构造jQuery对象的初步工作就做完了

浅析jQuery框架与构造对象

时间: 2024-10-15 05:48:06

浅析jQuery框架与构造对象的相关文章

第五节:JQuery框架源码简析(1)

(转自老惠的博客) JQuery是一个应用广泛.非常优秀的JavaScript框架,其代码简洁而优雅,有很多值得我们学习的地方.这里仅仅对其代码结构做一个简单的分析,方便大家的理解和学习. 我们进行分析.分解的基准版本是jQuery1.7.1. 开始之前,请准备好以下素材和工具: jQuery源代码:jquery-1.7.1.js 文本编辑器:EditPlus,或者你喜欢的 参考书:<jQuery高级编程>.<jQuery技术内幕:深入解析jQuery架构设计与实现原理>.<

jQuery框架学习

之前也看过jquery库源码,网上也有很多对于jquery框架的分析教程,但是最近又想花点时间重新学习.jquery问世以来受到了广大的前端开发者的青睐,对于很多前端开发者来说,走上前端的道路不是从写原生javascript开始而是基本上都是从写jquery开始的,甚至对于后端开发者来说,对于他们来说jquery也能轻松上手.那么jquery为什么能这么受欢迎呢,我个人见解,  首先,jquery封装了许多操作dom的方法和一些工具方法,对于各浏览器兼容性做到了完美的兼容,对于jquery 2.

Java项目在jsp页面中引入jquery框架的步骤

环境:在Java  web项目中引入juqery框架 工具:MyEclipse8.5 [步骤如下] A:新建一个Java web项目TestJquery,在WebRoot目录下创建一个jquery文件夹 B:下载jquery-1.8.3.min.js放入jquery文件夹中 C:创建jsp页面 <%@ page language="java" import="java.util.*" pageEncoding="ISO-8859-1"%&g

jQuery2.1.1源码分析(一)---微型jQuery框架

错误很多,多多指教. 去掉繁杂的代码,下面就相当于一个微型的jQuery框架. //一个js函数function,闭包传入window变量运行,(function(window){ //定义jQuery赋值给3个变量,返回一个对象jQuery.fn.init的实例化 var jQuery = window.jQuery = window.$ = function( selector, context ) { return new jQuery.fn.init( selector, context

jQuery框架分析第一章: 第一个匿名函数

我的jQuery版本为1.7* 这个版本代码比之前的版本优化了很多,结构也清晰了不少,就用最新的吧. 打开jQuery源代码 首先你能看到所有代码被一个 (function(window,undefined){ })(window) 这是个什么东西.. 首先,这是一个匿名函数(不懂?那就先去谷歌下吧): 其次,这是一个自调用匿名函数: 这段代码做了三件事 第一件:创建一个只给jQuery用的空间,我们估且就叫 “私有空间”,与C++的命名空间很相似,为了保证jQuery不与其他JavaScrip

(十七)JQuery框架一定要在angularJS之前加载

如果我们的web页面只引入angulrjs框架(不引入jQuery框架),那么我们使用过程中可能会遇到如下错误: Error: [jqLite:nosel] Looking up elements via selectors is not supported by jqLite! 比如下面的代码,当我们点击injector按钮的时候,就会出现类似上面的错误. 错误代码1: <html> <head> <script src="angular-1.2.25.js&qu

jQuery框架-3.jQuery自定义封装插件和第三方插件

一.jQuery的封装扩展 1.jQuery中extend方法使用 (挂在到jQuery和jQuery.fn两对象身上的使用) 1.1.官方文档定义: jQuery.extend   Merge the contents of two or more objects together into the first object.把两个或者多个对象合并到第一个对象当中: jQuery.fn.extend   Merge the contents of an object onto the jQue

jQuery系列 第三章 jQuery框架操作CSS

第三章 jQuery框架操作CSS 3.1 jQuery框架的CSS方法 jQuery框架提供了css方法,我们通过调用该方法传递对应的参数,可以方便的来批量设置标签的CSS样式. 使用JavaScript设置标签的样式相对来说比较麻烦,而如果需要批量的设置多个标签的样式那需要写很多代码,使用jQuery可以为我们简化该过程.     使用原生的方式来设置标签的样式(代码示例) 1 <body> 2 <div>我是div标签</div> 3 <button id=

jQuery系列 第四章 jQuery框架的选择器

第四章 jQuery框架的选择器 4.1 jQuery选择器说明 jQuery 最核心的组成部分就是选择器引擎.它完全继承了 CSS 的风格,可以对 DOM 元 素的标签名.属性名.状态等进行快速准确的选 择,而且不必担心浏览器的兼容性,写法更加简洁. jQuery 选择器实现了 CSS1~CSS3 的大部分规则之外,还实现了一些自定义的选择器,用于各种特殊状态的选择. 优点:相对于直接使用 JavaScript 获取页面元素和处理业务逻辑相比,使用jQuery 选择器来进行操作代码更简单且拥有