欢迎访问我的github:huanshen,有我的源码解析

1、each

跟for循环很像,但是更有用,如果你理解了就知道了。

// 遍历一个数组或者对象// obj 是需要遍历的数组或者对象// callback 是处理数组/对象的每个元素的回调函数,它的返回值实际会中断循环的过程// args 是额外的参数数组each: function( obj, callback, args ) {var value,i = 0,length = obj.length,isArray = isArraylike( obj );//如果args存在的话,callback中传入的参数是grgs,each循环次数确是由obj来确定的if ( args ) {if ( isArray ) {for ( ; i < length; i++ ) {value = callback.apply( obj[ i ], args );if ( value === false ) {break;}}} else {for ( i in obj ) {value = callback.apply( obj[ i ], args );if ( value === false ) {break;}}}// A special, fast, case for the most common use of each//注意下面用的是call,上面是apply//apply 的第二个参数以数组的形式传入,但是真正运行的时候,//传入的数组参数会变成一个个的形式,而不是一个数组参数} else {if ( isArray ) {for ( ; i < length; i++ ) {value = callback.call( obj[ i ], i, obj[ i ] );if ( value === false ) {break;}}} else {for ( i in obj ) {value = callback.call( obj[ i ], i, obj[ i ] );if ( value === false ) {break;}}}}return obj;},

2.makeArray

将类数组对象转化为数组。中间用到了merge函数,具体可见第三个函数,有说明。类数组对象(isArraylike)形如{0:"tt",2:"ccc",length:2};就是属性是数字形式,同时有length属性。

// 将类数组对象转换为数组对象// 此方法为内部方法makeArray: function( arr, results ) {var ret = results || [];if ( arr != null ) {// 如果 arr 是一个类数组对象,调用 merge 合到返回值if ( isArraylike( Object(arr) ) ) {jQuery.merge( ret,typeof arr === "string" ?[ arr ] : arr);} else {// 如果不是数组,则将其放到返回数组末尾// 等同于 ret.push(arr);
                core_push.call( ret, arr );}}return ret;},

关于中间的Object()可以看看下面的结果(暂时不是很清楚具体的作用):

var str="tttt",arr1=[1,2,3],obj={1:0},str2=Object(str);console.log( Object(str))//{0: "t", 1: "t", 2: "t", 3: "t", length: 4, [[PrimitiveValue]]: "tttt"}console.log(str2.length)//4console.log(Object(arr1))//[1, 2, 3]console.log(Object(obj))//{1: 0}

3、merge 

可以合并两个数组或者类数组对象

//把second中的属性添加到first中//second可以是数组或者类数组对象,又或者包含0,1属性的东西merge: function( first, second ) {var l = second.length,i = first.length,j = 0;if ( typeof l === "number" ) {for ( ; j < l; j++ ) {first[ i++ ] = second[ j ];}} else {while ( second[j] !== undefined ) {first[ i++ ] = second[ j++ ];}}first.length = i;return first;},

4、map

功能跟each差不多,但是也有不一样的地方,主要是在处理第三个参数方面。

map: function( elems, callback, arg ) {var value,i = 0,length = elems.length,isArray = isArraylike( elems ),ret = [];// Go through the array, translating each of the items to their//如果是数组,isArray=true;//与each传入参数顺序是一致的if ( isArray ) {for ( ; i < length; i++ ) {value = callback( elems[ i ], i, arg );if ( value != null ) {ret[ ret.length ] = value;}}// Go through every key on the object,//如果是对象} else {for ( i in elems ) {value = callback( elems[ i ], i, arg );if ( value != null ) {ret[ ret.length ] = value;}}}// Flatten any nested arraysreturn core_concat.apply( [], ret );},

5、proxy

proxy(),接受一个函数,然后返回一个新函数,并且这个新函数始终保持了特定的上下文(context )语境。

proxy: function( fn, context ) {var tmp, args, proxy;if ( typeof context === "string" ) {tmp = fn[ context ];context = fn;fn = tmp;}// Quick check to determine if target is callable, in the spec// this throws a TypeError, but we will just return undefined.if ( !jQuery.isFunction( fn ) ) {return undefined;}// Simulated bind//如果传入的参数多余2个,把多余的参数转变为数组。args = core_slice.call( arguments, 2 );proxy = function() {//这里用到了柯里化return fn.apply( context || this, args.concat( core_slice.call( arguments ) ) );};// Set the guid of unique handler to the same of original handler, so it can be removedproxy.guid = fn.guid = fn.guid || jQuery.guid++;return proxy;},

柯里化(Currying)是把接受多个参数的函数变换成接受一个单一参数(最初函数的第一个参数)的函数,并且返回接受余下的参数且返回结果的新函数的技术。具体可以看下面这个示例:可以看到前面两个参数并没有输出,最后一个参数和新的参数组成数组输出。在上面就是作为参数传入proxy中

function t (l,t,y){var args = [].slice.call( arguments, 2 );console.log(args)function t(){console.log(args.concat([].slice.call( arguments )));}return t;}var tt=t(1,2,3);tt("t");//[3,"t"]

jQuery中的函数汇总1相关推荐

  1. hibernate mysql 时间比较_Hibernate中HQL函数汇总及获取当前时间进行比较举例

    在很多时候,我们负责的项目中,在数据访问层(DAO层)通常我们会使用sql语句或者hql语句,而在我们使用hql语句拼接时有时会报错,通常的原因是:我们使用了标准的sql语句,开启的确是hiberna ...

  2. jQuery中live函数的替代-【jQuery】

    在老版本的jQuery中,当需要对页面上某个由ajax加载的某片段的页面内容响应事件时,可以使用live函数来响应其事件,比如: $('a').live('click', function() { b ...

  3. Jquery中get函数

    这个函数的功能是从服务器中获取到数据,其实是从一个php文件中获取到数据,这个函数有两个参数,第一个参数是url也就是我们要从哪一个网页中获取到数据,第二个参数是一个callback,也即是一个回调函 ...

  4. jQuery 中 is() 函数常见使用方法

    依据选择器.DOM元素或 jQuery 对象来检測匹配元素集合.假设当中至少有一个元素符合这个给定的表达式就返回true. 假设没有元素符合,或者表达式无效.都返回'false'. '''注意:''' ...

  5. JQuery中trim函数的具体实现代码

    由于Javascript 1.8.1 之前的版本,没有内置 trim 函数,所以 JQuery 对它有自己的实现.不同的JQuery版本,trim函数的实现也不尽相同. 阅读本文需要掌握正则表达式用法 ...

  6. jQuery中toggle()函数的应用总结(包含今天项目中碰到的前端控件)

    本人是一名后台开发人员,然而公司项目没有做到前后端分离,前端仅仅是写静态页面,js还得后台开发人员写.对于前端的东西呢常见东西的是没有问题,但是有些东西用的少可能容易忘记.这不今天接手维护另一个同事的 ...

  7. jquery中each函数的详细用法

    each()函数是基本上所有的框架都提供了的一个工具类函数,通过它,你可以遍历对象.数组的属性值并进行处理.jQuery和jQuery对象都实 现了该方法,对于jQuery对象,只是把each方法简单 ...

  8. Hibernate中HQL函数汇总及其说明

    2019独角兽企业重金招聘Python工程师标准>>> Criteria查询对查询条件进行了面向对象封装,符合编程人员的思维方式,不过HQL(Hibernate Query Lang ...

  9. 关于jQuery中自定义函数的操作

    jQuery.extend(object);$.extend(object); //是对jquery类的扩展jQuery.fn.extend(object);$.fn.extend(object); ...

最新文章

  1. eclipse中各种查找
  2. 如何用Java类配置Spring MVC(不通过web.xml和XML方式)
  3. 阿里云容器服务与ASP.NET Core部署:用 docker secrets 保存 appsettings.Production.json
  4. 特征工程——categorical特征 和 continuous特征
  5. Ubuntu下文件权限管理
  6. 10.Partial Dependence Plots
  7. Ubuntu 中的编程语言(中)
  8. vue动态发布到线上_Vue 2.6 发布了
  9. MySQL中select * for update锁表的范围
  10. linux下常用的文本转换命令1(tr)
  11. Cadence学习之路(八)画PCB前你必须知道的事情!
  12. 打印收款单据(easypoi)Vue+springBoot+Mybatisplus
  13. Windows Server 2019/2022域控制器网络位置变为“专用网络”或“公共网络”
  14. python tkinter 自主小项目——计算器往事
  15. Steam版XCOM: Enemy Within(内部敌人)不能启动的问题
  16. 三星s8android pie,三星修改Galaxy S8的Android Pie更新时间表,并添加M2
  17. python打印九九乘法表到文件_99乘法表打印_python怎么打印九九乘法表
  18. 【HTML5】基础教程
  19. 三菱FX3U——ST编程CASE选择
  20. python基础 海龟绘图 绘制奥运五环

热门文章

  1. dva源码解析(一)
  2. 金兄的境界:我的名字搜索终于出来了。重要信息声明,并永久置顶。我的博客在零网zeronet...
  3. 【Scikit-Learn 中文文档】支持向量机 - 监督学习 - 用户指南 | ApacheCN
  4. 手机连接电脑wifi
  5. 中国医学不能走西方道路
  6. 终于有人把可解释机器学习讲明白了
  7. 5个步骤带你入门FPGA设计流程
  8. 为什么在一个公司待了两三年就想离职?
  9. 对乱糟糟的日志说再见
  10. 使用 guava-retrying 实现灵活的重试机制