关于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下4个跨浏览器必备的函数
Mar 07 Javascript
jQuery入门第一课 jQuery选择符
Mar 14 Javascript
基于jquery的一个图片hover的插件
Apr 24 Javascript
Web开发之JavaScript
Mar 29 Javascript
一些常用弹出窗口/拖放/异步文件上传等实用代码
Jan 06 Javascript
checkbox使用示例
Aug 23 Javascript
javascript按位非运算符的使用方法
Nov 14 Javascript
浅谈JS继承_寄生式继承 &amp; 寄生组合式继承
Aug 16 Javascript
vue中appear的用法
Aug 17 Javascript
JS弹窗 JS弹出DIV并使整个页面背景变暗功能的实现代码
Apr 21 Javascript
浅谈Angular 观察者模式理解
Nov 01 Javascript
Javascript使用integrity属性进行安全验证
Nov 07 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
php写的简易聊天室代码
2011/06/04 PHP
php加密算法之实现可逆加密算法和解密分享
2014/01/21 PHP
Destoon模板制作简明教程
2014/06/20 PHP
PHP实现图片裁剪、添加水印效果代码
2014/10/01 PHP
php生成验证码函数
2015/10/20 PHP
自动更新作用
2006/10/08 Javascript
js+css在交互上的应用
2010/07/18 Javascript
使用隐藏的new来创建对象
2011/03/29 Javascript
js中创建对象的几种方式示例介绍
2014/01/26 Javascript
跟我学习javascript的定时器
2015/11/19 Javascript
jQuery简单验证上传文件大小及类型的方法
2016/06/02 Javascript
BootStrap tab选项卡使用小结
2020/08/09 Javascript
浅谈对Angular中的生命周期钩子的理解
2017/07/31 Javascript
JS字符串去除连续或全部重复字符的实例
2018/03/08 Javascript
javascript性能优化之分时函数的介绍
2018/03/28 Javascript
vue实现个人信息查看和密码修改功能
2018/05/06 Javascript
vue中使用input[type=&quot;file&quot;]实现文件上传功能
2018/09/10 Javascript
vue根据进入的路由进行原路返回的方法
2018/09/26 Javascript
Vue-CLI 项目在pycharm中配置方法
2019/08/30 Javascript
怎么理解wx.navigateTo的events参数使用详情
2020/05/18 Javascript
vue实现表格合并功能
2020/12/01 Vue.js
Python考拉兹猜想输出序列代码实践
2019/07/05 Python
Python制作微信好友背景墙教程(附完整代码)
2019/07/17 Python
python并发编程多进程 互斥锁原理解析
2019/08/20 Python
python实现单张图像拼接与批量图片拼接
2020/03/23 Python
Python requests.post方法中data与json参数区别详解
2020/04/30 Python
python给list排序的简单方法
2020/12/10 Python
美国经典刺绣和字母儿童服装特卖:Smocked Auctions
2018/07/16 全球购物
JD Sports丹麦:英国领先的运动时尚零售商
2020/11/24 全球购物
如何利用cmp命令比较文件
2013/09/23 面试题
大学生职业规划论文
2014/01/11 职场文书
教师党员个人整改措施材料
2014/09/16 职场文书
县长“四风”对照检查材料思想汇报
2014/10/05 职场文书
2015年办公室个人工作总结
2015/04/20 职场文书
安全生产感想
2015/08/07 职场文书
深入理解go slice结构
2021/09/15 Golang