关于jQuery中的each方法(jQuery到底干了什么)


Posted in Javascript onMarch 05, 2014

1. 估计很多人都会用到jQuery中的each方法。

那就来看一看jQuery都干了些什么。

找到jquery中的each源码:

each: function( object, callback, args ) { 
var name, i = 0, 
length = object.length, 
isObj = length === undefined || jQuery.isFunction( object ); if ( args ) { 
if ( isObj ) { 
for ( name in object ) { 
if ( callback.apply( object[ name ], args ) === false ) { 
break; 
} 
} 
} else { 
for ( ; i < length; ) { 
if ( callback.apply( object[ i++ ], args ) === false ) { 
break; 
} 
} 
} 
// A special, fast, case for the most common use of each 
} else { 
if ( isObj ) { 
for ( name in object ) { 
if ( callback.call( object[ name ], name, object[ name ] ) === false ) { 
break; 
} 
} 
} else { 
for ( ; i < length; ) { 
if ( callback.call( object[ i ], i, object[ i++ ] ) === false ) { 
break; 
} 
} 
} 
} 
return object; 
},

这段代码还是比较简单的,应该没什么问题.

为了测试这个东西,我写了下面一段js;

$.each($(".demo"),function(){ 
console.log("show"); 
});

然后再加一段html:
<a href="" class="demo"></a> 
<a href="" class="demo"></a> 
<a href="" class="demo"></a>

然后拿着jQuery的源码来调试,以为能得到正确的结果。可是很遗憾。
关于jQuery中的each方法(jQuery到底干了什么) 
可以看到,这里的object竟然不是我所想要的那三个html对象,竟然是js内置的8种数据类型。

之后在jquery的源码中加了一段代码:

console.log(Object.prototype.toString(object)); 
console.log(length);

之后的输入如下:
关于jQuery中的each方法(jQuery到底干了什么) 
也就是说在文档加载的时候,jQuery会用each遍历dom对象,即使没有使用
$(function(){ 
});

当遍历指定对象之后,依旧会继续冒泡遍历父级元素。

2. 根据jQuery的源码使用回调函数参数

$.each($(".demo"),function(a,b){ 
console.log(a + "" + $(a).attr("class")); 
})

从源码可以看到:
callback.call( object[ i ], i, object[ i++ ] )

最后都将当前对象通过call方法传递给了回调函数,那么就可以像上面一样去使用当前对象中的属性。当然也可以直接用this来调用。

如果说复杂些的东西,比如,这里我是将$(".demo")作为object传递进去给$.each()

如里某些时候不是传递的jQuery或者html对象。而是一个Object或者array。

而在array中又存在很多其它的object或者方法。

这样就能弄出更多的效果。

3. 采用call或者apply实现回调模式.

从上面的代码可以看到:

callback.call(obj,args)

callback.apply([obj],args)

之类的代码,这里只需要传递callback函数,就能实现自己调用,这对于提高代码的复用程度用处不小。

但是也存在某些缺点,比如代码可读性降低,耦合程度增加等。

偶有所得,以记录之,以防忘记!

Javascript 相关文章推荐
javascript 获取网页参数系统
Jul 19 Javascript
JavaScript Undefined,Null类型和NaN值区别
Oct 22 Javascript
JavaScript Event学习第三章 早期的事件处理程序
Feb 07 Javascript
js下写一个事件队列操作函数
Jul 19 Javascript
基于jquery的可多选的下拉列表框
Jul 20 Javascript
js常用数组操作方法简明总结
Jun 20 Javascript
JavaScript中的prototype原型学习指南
May 09 Javascript
jQuery dataTables与jQuery UI 对话框dialog的使用教程
Sep 02 Javascript
详解Vue.js 2.0 如何使用axios
Apr 21 Javascript
Webpack中css-loader和less-loader的使用教程
Apr 27 Javascript
使用layui的router来进行传参的实现方法
Sep 06 Javascript
react使用CSS实现react动画功能示例
May 18 Javascript
JavaScript 实现简单的倒计时弹窗DEMO附图
Mar 05 #Javascript
js时间比较示例分享(日期比较)
Mar 05 #Javascript
对于Form表单reset方法的新认识
Mar 05 #Javascript
js和css写一个可以自动隐藏的悬浮框
Mar 05 #Javascript
7个JS基础知识总结
Mar 05 #Javascript
100个不能错过的实用JS自定义函数
Mar 05 #Javascript
jQuery DOM操作实例
Mar 05 #Javascript
You might like
php5 apache 2.2 webservice 创建与配置(java)
2011/01/27 PHP
解析PHP中DIRECTORY_SEPARATOR,PATH_SEPARATOR两个常量的作用
2013/06/21 PHP
PHP实现WebService的简单示例和实现步骤
2015/03/27 PHP
jQuery EasyUI API 中文文档 - NumberSpinner数值微调器使用介绍
2011/10/21 Javascript
JavaScript中__proto__与prototype的关系深入理解
2012/12/04 Javascript
以JSON形式将JS中Array对象数组传至后台的方法
2014/01/06 Javascript
jquery ztree实现下拉树形框使用到了json数据
2014/05/14 Javascript
js交换排序 冒泡排序算法(Javascript版)
2014/10/04 Javascript
wangEditor编辑器失去焦点后仍然可以在原位置插入图片分析
2015/05/06 Javascript
js数组去重的方法汇总
2015/07/29 Javascript
jquery拖动层效果插件用法实例分析(附demo源码)
2016/04/28 Javascript
基于gulp合并压缩Seajs模块的方式说明
2016/06/14 Javascript
jQuery操作json常用方法示例
2017/01/04 Javascript
Angular 2父子组件数据传递之局部变量获取子组件其他成员
2017/07/04 Javascript
微信小程序实现action-sheet弹出底部菜单功能【附源码下载】
2017/12/09 Javascript
nodejs中函数的调用实例详解
2018/10/31 NodeJs
JavaScript文本特效实例小结【3个示例】
2018/12/22 Javascript
如何正确解决VuePress本地访问出现资源报错404的问题
2020/12/03 Vue.js
如何优雅地改进Django中的模板碎片缓存详解
2018/07/04 Python
Python列表操作方法详解
2020/02/09 Python
Django实现列表页商品数据返回教程
2020/04/03 Python
浅析Python打包时包含静态文件处理方法
2021/01/15 Python
商务专员岗位职责
2013/11/23 职场文书
千元咖啡店的创业计划书范文
2013/12/29 职场文书
中级会计职业生涯规划范文
2014/01/16 职场文书
大学生旷课检讨书
2014/01/22 职场文书
机关出纳岗位职责
2014/04/03 职场文书
《李广射虎》教学反思
2014/04/27 职场文书
小学三好学生事迹材料
2014/08/15 职场文书
单位工作证明
2014/10/07 职场文书
2014年驻村干部工作总结
2014/11/17 职场文书
教师党员自我评价2015
2015/03/04 职场文书
学校捐书倡议书
2015/04/27 职场文书
发工资啦!教你用Python实现邮箱自动群发工资条
2021/05/10 Python
压缩Redis里的字符串大对象操作
2021/06/23 Redis
Win11局域网共享权限在哪里设置? Win11高级共享的设置技巧
2022/04/05 数码科技