位置: 编程技术 - 正文

jquery.Callbacks的实现详解

编辑:rootadmin

推荐整理分享jquery.Callbacks的实现详解,希望有所帮助,仅作参考,欢迎阅读内容。

文章相关热门搜索词:,内容如对您有帮助,希望把文章链接给更多的朋友!

前言

jQuery.Callbacks是jquery在1.7版本之后加入的,是从1.6版中的_Deferred对象中抽离的,主要用来进行函数队列的add、remove、fire、lock等操作,并提供once、memory、unique、stopOnFalse四个option进行一些特殊的控制。

功能介绍

jq的Callbacks模块主要是为其他模块提供服务的,他就像一个温柔的小女人,在背后默默地付出。Deferred就像一个巨人,在jq中那么的突出,但在内部,他受到Callbacks的服务。

Callbacks的几种状态:

once -- 回调函数只执行一次

unique -- 函数不能重复添加到回调列表中

memory -- 状态记忆,主要用于Deferred中

stopOnFalse -- 遇到return false 终止回调列表继续执行

我自己实现的Callbacks的几个简单的方法

add -- 向对应的回调函数列表添加一个函数

fire -- 触发回调,回调函数列表依次执行函数

has -- 回调函数列表是否存在传入函数

clear -- 清空回调函数列表

整体结构

jquery.Callbacks的实现详解

首先,我们要向得到一个想要的Callbacks模块,需要这样做:

由于我们需要基于一定状态来得到不同的实例,我们可以确定,我们需要一个存储状态的对象

我们给Callback函数传入了'memory once',我们怎么记录这两个状态呢,在这里,仿jq来写的一个函数来实现,如下:

以上代码,将 'memory once' 变成了 {memory: true, once: true} ,如果状态缓存对象里有这个对象,直接返回,没有的话先创建再返回。

接下来,就是Callback函数的全部代码了,先上代码

Callback函数执行后,返回一个对象,然后该对象包含了几个简单的功能。

下面我来介绍一下这部分的实现。

首先,如jq一样,我也定义了内部的add, fire, has方法,主要原因是逻辑需要,在返回对象的方法中实现once,memory状态控制,内部的add,fire方法是纯粹的添加和触发函数。

先来看cb.add方法,add方法可以接收多个函数,因此

使用内部的add做添加功能

再往下的一部分的功能是判断这个回调模块是否是memory状态,理解Deferred模块的同学应该知道,该模块是Promise模式,订阅成功或失败状态的回调函数,然后再某一时刻触发他,这个模式便引用了memory状态下的Callback,这个模式有一个奇怪的地方,如果你先发布成功,但是回调列表空空如也,那么程序并不会发布失败,而是等待成功回调函数的加入,一但回调函数加入,立刻执行他。

就是如下代码

提示 : ‘如果你先发布成功,但是回调列表空空如也,那么程序并不会发布失败,而是等待成功回调函数的加入,一但回调函数加入,立刻执行他' 的理解如下代码

如果在非memory状态,以上代码无效。需要再次fire才会执行。

经过上述,fire函数也好理解了,fire可接收两个参数,函数上下文,函数参数数组。

与add中memory状态的代码连串起来,以下代码就是fire时memory状态下的操作

如果是memory状态,回调列表为空,就保存函数执行上下文和参数数组,等add时立刻执行。

除了上述以外,代码就很简单易懂啦,Callback函数就到这里了,很简单的功能,唯一一点不好理解的就是memory状态。

总结

标签: jquery.Callbacks的实现详解

本文链接地址:https://www.jiuchutong.com/biancheng/376270.html 转载请保留说明!

上一篇:浅谈jquery的html方法里包含特殊字符的处理(jquery html函数)

下一篇:深入理解jQuery.data() 的实现方式(深入理解中国式现代化论文)

  • 个人哪些捐赠可以税前扣除
  • 价外费用纳税义务发生时间
  • 销售收入怎么做会计凭证
  • 运输途中合理的消耗损耗
  • 发票遗失重开需要收费吗
  • 租房专项扣除有上限吗
  • 季度不超过9万
  • 科技型中小企业条件
  • 以前年度社保计提出错了怎么调整
  • 租赁房屋缴纳什么税
  • 过路费普通发票可以抵税吗
  • 技术维护费280全额抵扣会计分录
  • 法院拍卖房法院有什么义务和责任
  • 小规模纳税人开专票税率是1%还是3%
  • 固定资产清理收入增值税税率
  • 服务费专票普票
  • 用友t3修改帐套怎样修改企业会计准则
  • 收到加盟费尾款怎么做分录?
  • 个人所得税申报密码如何设置
  • 净资产怎么算的 视频
  • 建筑队能开哪些项目
  • 公司已转让 前面会不会追究
  • 征信费用会计分录
  • 与存货相关的车间固定资产日常
  • 已达到计算机的连接数最大值win7
  • 增值税四个税种
  • 企业筹建期间购置机器设备支出计入什么科目
  • win7如何调出浏览器
  • win11电脑怎么设置开机密码
  • PHP:stream_set_blocking()的用法_Stream函数
  • 多台电脑如何共享一台惠普打印机
  • 通过mac地址查找ip的协议
  • 银行票据贴现业务发展中遇到的困难
  • wordpress建网站详细教程
  • framework在哪
  • 收到税务局退款怎么做分录
  • vue set up
  • 借管理费用贷应交税费个人所得税
  • 公司注册资金减资要交税吗
  • 文化事业建设费税收优惠政策2023
  • 事业收入如何确认
  • 公益性怎么解释
  • 增值税一般纳税人可以开普票吗
  • 研发费用计入科目
  • php底部导航代码
  • 金蝶标准版怎么查应收应付款
  • 收到保险赔款入什么科目
  • 变卖固定资产的账务处理
  • 哪些项目的进项不含税
  • 车保险费中的车费是什么
  • 公司采购产品赠送给客户会计分录
  • 预期年化收益率安全吗
  • 发工资扣的个人社保计入哪个科目
  • 水利建设税怎么做账
  • 印花税计提依据业务发生时间还是开票时间?
  • 阿里云centos7安装图形界面
  • mysql的基本sql语句
  • mysql数据库简单介绍
  • linux常用命令chown
  • ensmix32.exe进程安全吗 ensmix32进程是什么文件产生的
  • wind10怎么恢复wind7
  • linux r安装
  • win11连接win7共享打印机
  • 为wdcp面板的lnmp服务器添加ipv6支持的方法介绍
  • png批量转换成jpg
  • extjs4 treepanel动态改变行高度示例
  • css设置表格隔行换色
  • shell脚本语句
  • css+div布局的常用方法
  • python里的迭代器
  • jquery文件上传进度条
  • 磁盘监视器在哪
  • De facto standard 世界上不可思议的事实标准
  • Listview的onItemClickListener无法响应的解决方法
  • android 标签栏
  • 广东税务查询系统
  • 贵州开票软件怎么下载安装
  • 个体户定额怎么查询
  • 武汉税务局官网查询系统
  • 股息税怎么计算
  • 免责声明:网站部分图片文字素材来源于网络,如有侵权,请及时告知,我们会第一时间删除,谢谢! 邮箱:opceo@qq.com

    鄂ICP备2023003026号

    网站地图: 企业信息 工商信息 财税知识 网络常识 编程技术

    友情链接: 武汉网站建设