关于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引用对象的方法代码
Aug 13 Javascript
慎用 somefunction.prototype 分析
Jun 02 Javascript
JQuery动画animate的stop方法使用详解
May 09 Javascript
js调试工具console.log()方法查看js代码的执行情况
Aug 08 Javascript
原生js实现网易轮播图效果
Apr 10 Javascript
实现一个简单的vue无限加载指令方法
Jan 10 Javascript
js实现动态显示时间效果
Mar 06 Javascript
jquery事件与绑定事件
Mar 16 Javascript
webpack配置的最佳实践分享
Apr 21 Javascript
使用JS实现导航切换时高亮显示的示例讲解
Aug 22 Javascript
vue中使用微信公众号js-sdk踩坑记录
Mar 29 Javascript
vite2.0+vue3移动端项目实战详解
Mar 03 Vue.js
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
关于PhpStorm设置点击编辑文件自动定位源文件的实现方式
2020/12/30 PHP
常见的5个PHP编码小陋习以及优化实例讲解
2021/02/27 PHP
简单通用的JS滑动门代码
2008/12/19 Javascript
JQuery 实现的页面滚动时浮动窗口控件
2009/07/10 Javascript
CSS和Javascript简单复习资料
2010/06/29 Javascript
模拟jQuery ajax服务器端与客户端通信的代码
2011/03/28 Javascript
jquery实现的图片点击滚动效果
2014/04/29 Javascript
javascript实现动态模态绑定grid过程代码
2014/09/22 Javascript
js实现点击按钮后给Div图层设置随机背景颜色的方法
2015/05/06 Javascript
JavaScript动态添加css样式和script标签
2016/07/19 Javascript
微信小程序 action-sheet底部菜单详解
2016/10/27 Javascript
在js中做数字字符串补0(js补零)
2017/03/25 Javascript
深入理解angular2启动项目步骤
2017/07/15 Javascript
mpvue 单文件页面配置详解
2018/12/02 Javascript
vue数据操作之点击事件实现num加减功能示例
2019/01/19 Javascript
pm2启动ssr失败的解决方法
2019/06/29 Javascript
使用layer弹窗提交表单时判断表单是否输入为空的例子
2019/09/26 Javascript
JS中自定义事件的使用与触发操作实例分析
2019/11/01 Javascript
Python OS模块常用函数说明
2015/05/23 Python
python操作ssh实现服务器日志下载的方法
2015/06/03 Python
解决tensorflow测试模型时NotFoundError错误的问题
2018/07/27 Python
python可视化爬虫界面之天气查询
2019/07/03 Python
详解python 条件语句和while循环的实例代码
2020/12/28 Python
Python读取ini配置文件传参的简单示例
2021/01/05 Python
Spartoo荷兰:鞋子、包包和服装
2018/07/12 全球购物
YOOX台湾:意大利奢侈品电商
2018/10/13 全球购物
后勤主管工作职责
2013/12/07 职场文书
基本公共卫生服务健康教育工作方案
2014/05/22 职场文书
文案策划专业自荐信
2014/07/07 职场文书
高中校园广播稿3篇
2014/09/29 职场文书
安全保证书
2015/01/16 职场文书
九华山导游词
2015/02/03 职场文书
幼儿园班级管理心得体会
2016/01/07 职场文书
2016年社会主义核心价值观心得体会
2016/01/21 职场文书
Win11软件图标固定到任务栏
2022/04/19 数码科技
MySQL的意向共享锁、意向排它锁和死锁
2022/07/15 MySQL