`
晨曦的朝阳
  • 浏览: 10719 次
  • 性别: Icon_minigender_1
  • 来自: 广州
社区版块
存档分类
最新评论

jQuery1.7系列一: jQuery 对象的实质

阅读更多

    声明:写博客,是对自身知识的一种总结,也是一种分享,但由于作者本人水平有限,难免会有一些地方说得不对,还请大家友善指出,或致电:tianzhen.chen0509@gmail.com

      关注:国内开源jQuery-UI组件库:Operamasks-UI

         jQuery版本: v1.7.1

 

jQuery1.7系列一:   jQuery 对象的实质

 

一.何为jQuery对象

 

        用过jQuery的朋友都知道,jQuery很大的一个特点就在于其选择器上,我们可以很容易对众多的dom节点进行操作,而且还是链式的操作,这一切都要得益于jQuery对象,那么jQuery对象到底是什么?

        我们经常写类似这样的代码: jQuery(“div”).addClass(“myCls”),而这里jQuery(“div”)返回的结果就是jQuery对象,其实它也就是一个 javascript对象来的,只是这个对象的创建过程比较复杂而已,而只有理解好了jQuery对象的实质,才能更好的深入学习jQuery。

 

二.jQuery对象创建的背后

 

    为了把握好jQuery对象的创建,有必要对其创建过程进行一个深入的分析。以下代码是jQuery对象创建的一个架子,我们可以由此来学习。

(function( window, undefined ) {
	var jQuery = (function() {
		var jQuery = function( selector, context ) {
			return new jQuery.fn.init( selector, context, rootjQuery );
		},
		jQuery.fn = jQuery.prototype = {
			constructor: jQuery,
			init: function(selector, context, rootjQuery){
				//做一些初始化工作,比如查找对应选择器的dom元素
			},
			length: 0
			//其它一些东西
		};
		jQuery.fn.init.prototype = jQuery.fn;
		return jQuery;
	})();
	window.jQuery = window.$ = jQuery;
})(window);
 

接下来,我们一步一步来解开jQuery对象的谜底。

 

1.      最外层的闭包代码是这样的:

(function( window,undefined ) {

})(window);

 

        把window对象传进去了,这倒没什么,有趣的是为什么会有个undefined 的形参? 在javascript语言中,Undefined是其中的一个类型,而其类型值只有 undefined 一个,就像Number也是其中的一个类型,但类型值却有多个,如100,20,88等等。而这个 undefined是用来标识一个未赋值的变量的,就比如声明一个变量 var fun , 这时fun的值就为undefined。但是由于有些古老的浏览器并不直接认识undefined,然而在调用函数传递参数时如果形参个数大于实参,后边 的形参却会被赋值真正的undefined,所以像上边这种写法是最保险的,能够保证闭包的形参undefined 一定是Undefined类型的唯一值 undefined.

        如果觉得有点晕,看下边这个例子。

var a =undefined;
 

        在某些旧浏览器中,如果它不能直接认识undefined,那么这样写应该会报undefined 这个变量没有定义的错误,而如果这样写

 

(function(undefined){

    var a = undefined;

})();
 

那么就一定不会报错了,所以jQuery还是考虑得很周到的。

 

2.      让我们再次精简代码,看看这个jQuery到底是什么

var jQuery = (function() {

    var jQuery = function(selector, context ) {

        return newjQuery.fn.init( selector, context, rootjQuery );

    },

    return jQuery;

})();

window.jQuery = window.$ = jQuery;
 

 

在使用的时候,我们是这样写的 $(“div”),而这个$其实就是下边这个函数,

 

var jQuery = function( selector, context ) {

         return new jQuery.fn.init( selector,context, rootjQuery );

},
 

所以执行 var $obj = $(“div”)就相当于执行

var $obj= return new jQuery.fn.init( "div", context, rootjQuery );

 

         到这里,我们便了然于胸,原来所谓的jQuery对象就是jQuery.fn.init这个函数的一个实例而已。

上边最原始的骨架图现在还剩下两句比较难懂的语句,它们是

 

jQuery.fn= jQuery.prototype = {}; //代码1

jQuery.fn.init.prototype= jQuery.fn; //代码2
 

为了更清晰到底发生了什么事,我们直接看执行这两句代码后结果如何:

 

 

        由以上图可以看出,这时候,init函数的prototype已经指向了jQuery.fn 所指向的对象,那也就是说,如果我向fn添加属性的话,那么 new init() 得到的实例也就相应可以找到新加的属性了,这也就是jQuery的插件机制。

         比如,你想添加一个方法,判断选择器中是否包括了表单,那么该插件大致可以这样写:

 

$.fn.containsForm = function(){

 var i=0,

      el;

    while(el=this[i++]){

             if(el.tagName.toLowerCase() === ‘form’){

                 return true;

             }

    }

    return false;

}
 

然后就可以直接使用该插件了,如 $(“myform”).containsForm();

 

       jQuery对象主要就是这样了,顺便还谈到了jQuery对fn的扩展机制,在jQuery的源码中,对jQuery对象添加了很多便利的方法,如addClass,find等,都是通过这种方式实现的。

  • 大小: 20.7 KB
4
2
分享到:
评论

相关推荐

    jquery1.7中文手册CHM文档(附jquery1.82chm手册)

    资源名称:jquery1.7 中文手册 CHM文档(附jquery1.82 chm手册)内容简介:因国内jquery中文手册更新太慢了,等了一段时间实在等不下去了,干脆自己动手做一个丰衣足食,时刻更新. 最后感谢Shawphy提供1.4.1版,jehn提供...

    jquery1.7及其帮助文档

    jQuery,作为一个强大的JavaScript库,自诞生以来就深受开发者喜爱,尤其在jQuery 1.7版本中,它进一步提升了性能和易用性。这个压缩包包含了关于jQuery 1.7的开发工具和帮助文档,是学习和使用该版本jQuery的重要...

    jquery1.7_20111204.rar

    《jQuery 1.7:构建高效前端交互的基石》 jQuery是JavaScript库的典范,以其简洁的API和强大的功能赢得了全球开发者的喜爱。本压缩包文件"jquery1.7_20111204.rar"包含了jQuery 1.7版本的相关资料,特别是其中的...

    jQuery1.7 中文手册.zip

    jquery1.7手册中文 CHM文档,编译于2012.02.09,也算是最新的jQuery参考文档了。内容比较丰富,查询方便,放在手边,可作为jquery速查手册,包括jQuery核心、选择器、属性、筛选器、文档处理、css、事件处理、效果、...

    jQuery1.7压缩和未压缩版

    5. **浏览器兼容性提升**:jQuery1.7继续加强了对各种浏览器的兼容性,包括老版本的Internet Explorer,确保了广泛的应用场景。 在实际项目中,选择使用压缩版还是未压缩版,取决于当前的开发阶段和需求。在开发...

    jQuery1.7 中文手册

    jQuery1.7 中文手册jQuery1.7 中文手册jQuery1.7 中文手册jQuery1.7 中文手册jQuery1.7 中文手册jQuery1.7 中文手册jQuery1.7 中文手册jQuery1.7 中文手册jQuery1.7 中文手册

    jQuery1.7 .7z

    10. **兼容性**:jQuery1.7对多种浏览器的良好兼容性是其受欢迎的一大原因,手册中会阐述如何处理不同浏览器的差异。 通过这个离线手册,开发者不仅可以了解jQuery1.7的核心功能,还可以学习到如何高效地应用它们来...

    jquery1.7中文参考手册

    6. **链式操作**:jQuery的一个显著特性是链式操作,允许在同一个对象上连续调用多个方法,如$(selector).css('color', 'red').addClass('highlight')。 7. **插件机制**:jQuery拥有强大的插件生态系统,如jQuery ...

    jQuery 1.7_中文API

    jQuery 1.7是该库的一个重要版本,它包含了一系列的更新和改进,使得开发者在网页开发中更加得心应手。 ### jQuery 1.7 的主要特性 1. **选择器增强**:jQuery 1.7进一步增强了CSS选择器的支持,包括对更多高级CSS...

    jquery 1.7 版本与中文api、 各种插件集合

    1.7版本是jQuery的一个稳定版本,发布于2011年,它带来了许多改进和新特性,旨在提升性能,优化DOM操作,并增强插件的兼容性。 在jQuery 1.7中,最显著的变化是对事件处理程序的改进。`on()`方法取代了`bind()`, `...

    jquery1.7版下载

    《jQuery 1.7:深度探索与应用指南》 jQuery,作为一款强大的JavaScript库,以其简洁的API和高效的性能在Web开发领域占据了重要的地位。本文将深入探讨jQuery 1.7这一经典版本,涵盖其核心功能、新特性、以及如何在...

    jquery1.7 中文文档

    - **选择器(Selectors)**: jQuery 提供了一系列 CSS 选择器,如 `#id`、`.class` 和 `tagname`,使开发者能方便地选取网页元素。此外,还有更高级的选择器如 `:first`、`:last`、`:even` 和 `:contains(text)` 等...

    jquery1.7说明文档+js库

    - **中文文档**:jQuery 1.7 的中文 API 文档帮助中国开发者更好地理解和使用这个库,提供清晰的函数说明和示例代码。 - **学习资源**:文档通常包括方法的详细解释、参数列表、返回值、示例和注意事项,方便...

    jquery 1.7 中文 api 修正版

    7. **插件扩展**:jQuery的插件生态系统丰富,通过`$.fn.extend()`可以扩展jQuery对象,创建自定义功能。例如,许多交互式组件和特效都是通过插件实现的。 8. **性能优化**:jQuery 1.7中引入了对现代浏览器的优化...

    jquery1.7中文文档

    jQuery 1.7版本是该库的一个重要里程碑,它在之前版本的基础上进行了多方面的优化和增强,提升了性能并提供了更稳定的API。此中文文档详细介绍了jQuery的核心特性和使用方法,旨在帮助中文开发者更好地理解和应用...

    jquery.1.7.js

    首先,jQuery 1.7版本是一个里程碑式的更新,它在前一版本的基础上做了大量的优化和增强。这个版本引入了“事件代理”(Event Delegation)的概念,使得处理动态添加元素的事件绑定变得更加高效。通过使用`.on()`...

    jquery1.7参考手册(chm版)

    6. **链式操作**:jQuery 的方法返回的都是jQuery对象,因此可以实现链式调用,如 `$('div').css('color', 'red').fadeIn(1000)`。 7. **插件开发**:jQuery 的可扩展性很强,通过插件可以扩展其功能。手册会介绍...

    jQuery1.7手册html版

    1. **选择器优化**:jQuery 1.7在选择器引擎中进行了优化,能够更快地匹配和查找DOM元素。这对于处理大型复杂的DOM结构尤其有帮助。 2. **事件处理**:jQuery 1.7改进了事件处理机制,允许更灵活的事件绑定和解绑。...

    jQuery_easyui+jQuery1.7API

    2. .promise() 和 $.when():加强了异步编程的支持,.promise() 返回一个表示特定jQuery对象的Promise对象,$.when() 则用于合并多个Promise对象,当所有Promise都完成时执行回调。 3. .data() 的改进:增强了数据...

Global site tag (gtag.js) - Google Analytics