声明:写博客,是对自身知识的一种总结,也是一种分享,但由于作者本人水平有限,难免会有一些地方说得不对,还请大家友善指出,或致电: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
分享到:
相关推荐
资源名称:jquery1.7 中文手册 CHM文档(附jquery1.82 chm手册)内容简介:因国内jquery中文手册更新太慢了,等了一段时间实在等不下去了,干脆自己动手做一个丰衣足食,时刻更新. 最后感谢Shawphy提供1.4.1版,jehn提供...
jQuery,作为一个强大的JavaScript库,自诞生以来就深受开发者喜爱,尤其在jQuery 1.7版本中,它进一步提升了性能和易用性。这个压缩包包含了关于jQuery 1.7的开发工具和帮助文档,是学习和使用该版本jQuery的重要...
《jQuery 1.7:构建高效前端交互的基石》 jQuery是JavaScript库的典范,以其简洁的API和强大的功能赢得了全球开发者的喜爱。本压缩包文件"jquery1.7_20111204.rar"包含了jQuery 1.7版本的相关资料,特别是其中的...
jquery1.7手册中文 CHM文档,编译于2012.02.09,也算是最新的jQuery参考文档了。内容比较丰富,查询方便,放在手边,可作为jquery速查手册,包括jQuery核心、选择器、属性、筛选器、文档处理、css、事件处理、效果、...
5. **浏览器兼容性提升**:jQuery1.7继续加强了对各种浏览器的兼容性,包括老版本的Internet Explorer,确保了广泛的应用场景。 在实际项目中,选择使用压缩版还是未压缩版,取决于当前的开发阶段和需求。在开发...
jQuery1.7 中文手册jQuery1.7 中文手册jQuery1.7 中文手册jQuery1.7 中文手册jQuery1.7 中文手册jQuery1.7 中文手册jQuery1.7 中文手册jQuery1.7 中文手册jQuery1.7 中文手册
10. **兼容性**:jQuery1.7对多种浏览器的良好兼容性是其受欢迎的一大原因,手册中会阐述如何处理不同浏览器的差异。 通过这个离线手册,开发者不仅可以了解jQuery1.7的核心功能,还可以学习到如何高效地应用它们来...
6. **链式操作**:jQuery的一个显著特性是链式操作,允许在同一个对象上连续调用多个方法,如$(selector).css('color', 'red').addClass('highlight')。 7. **插件机制**:jQuery拥有强大的插件生态系统,如jQuery ...
jQuery 1.7是该库的一个重要版本,它包含了一系列的更新和改进,使得开发者在网页开发中更加得心应手。 ### jQuery 1.7 的主要特性 1. **选择器增强**:jQuery 1.7进一步增强了CSS选择器的支持,包括对更多高级CSS...
1.7版本是jQuery的一个稳定版本,发布于2011年,它带来了许多改进和新特性,旨在提升性能,优化DOM操作,并增强插件的兼容性。 在jQuery 1.7中,最显著的变化是对事件处理程序的改进。`on()`方法取代了`bind()`, `...
《jQuery 1.7:深度探索与应用指南》 jQuery,作为一款强大的JavaScript库,以其简洁的API和高效的性能在Web开发领域占据了重要的地位。本文将深入探讨jQuery 1.7这一经典版本,涵盖其核心功能、新特性、以及如何在...
- **选择器(Selectors)**: jQuery 提供了一系列 CSS 选择器,如 `#id`、`.class` 和 `tagname`,使开发者能方便地选取网页元素。此外,还有更高级的选择器如 `:first`、`:last`、`:even` 和 `:contains(text)` 等...
- **中文文档**:jQuery 1.7 的中文 API 文档帮助中国开发者更好地理解和使用这个库,提供清晰的函数说明和示例代码。 - **学习资源**:文档通常包括方法的详细解释、参数列表、返回值、示例和注意事项,方便...
7. **插件扩展**:jQuery的插件生态系统丰富,通过`$.fn.extend()`可以扩展jQuery对象,创建自定义功能。例如,许多交互式组件和特效都是通过插件实现的。 8. **性能优化**:jQuery 1.7中引入了对现代浏览器的优化...
jQuery 1.7版本是该库的一个重要里程碑,它在之前版本的基础上进行了多方面的优化和增强,提升了性能并提供了更稳定的API。此中文文档详细介绍了jQuery的核心特性和使用方法,旨在帮助中文开发者更好地理解和应用...
首先,jQuery 1.7版本是一个里程碑式的更新,它在前一版本的基础上做了大量的优化和增强。这个版本引入了“事件代理”(Event Delegation)的概念,使得处理动态添加元素的事件绑定变得更加高效。通过使用`.on()`...
6. **链式操作**:jQuery 的方法返回的都是jQuery对象,因此可以实现链式调用,如 `$('div').css('color', 'red').fadeIn(1000)`。 7. **插件开发**:jQuery 的可扩展性很强,通过插件可以扩展其功能。手册会介绍...
1. **选择器优化**:jQuery 1.7在选择器引擎中进行了优化,能够更快地匹配和查找DOM元素。这对于处理大型复杂的DOM结构尤其有帮助。 2. **事件处理**:jQuery 1.7改进了事件处理机制,允许更灵活的事件绑定和解绑。...
2. .promise() 和 $.when():加强了异步编程的支持,.promise() 返回一个表示特定jQuery对象的Promise对象,$.when() 则用于合并多个Promise对象,当所有Promise都完成时执行回调。 3. .data() 的改进:增强了数据...