位置: 编程技术 - 正文

jquery.Callbacks的实现详解

发布时间:2024-02-27

推荐整理分享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() 的实现方式(深入理解中国式现代化论文)

  • 企业所得税的纳税义务人不包括下列哪类企业
  • 员工外出办事报备制度
  • 本年利润呈亏损要不要上企业所得税?
  • 建安行业是建筑行业吗
  • 不得开具增值税专票情形包括
  • 企业购买理财都需先交税再提现吗
  • 企业买车购置税跟个人一样吗
  • 出口退税贷方余额是什么意思
  • 资产减值准备对股票的影响
  • 处置其他权益工具投资时,应按取得的价款
  • 补交税款时加收的滞纳金有上限吗
  • 营改增后建筑公司账务处理
  • 转让财产需要缴税吗
  • 进口产品增值税的组成计税价格
  • 小微企业按季度预缴企业所得税
  • 滞留发票是什么意思
  • 哪些出口业务不能做
  • 污水处理费怎么收取的
  • 企业收到要发放给员工的补贴
  • 一般贸易和进料加工的区别是什么
  • win11本地用户和组
  • 定向增发是什么融资方式
  • 自用房地产转换为采用公允价值
  • 矿山机械设备租赁有限公司
  • 挂社保不发工资
  • php递归函数详解
  • 驾校收入与成本的关系
  • 如何获取openai api
  • 买房增值税征收标准
  • PHP:mcrypt_module_is_block_algorithm_mode()的用法_Mcrypt函数
  • php上传图片大小限制
  • sdhc 速度
  • 阿里php面试题
  • 赊销分期付款
  • 房产备案交税
  • node l
  • vue3 $bus
  • php安装openssl扩展
  • 船舶税率是多少
  • 公司的违约金
  • 个人所得税专项附加扣除赡养老人
  • 什么企业符合高新技术企业
  • 长期股权投资收益要交企业所得税吗
  • 绩效工资交个人所得税吗
  • 小规模不动产租赁要交哪些税
  • 商品流通企业采购费用
  • 增值税勾选统计后如何导出明细表
  • 专用发票红冲有时间限制吗
  • 财务软件是有哪些软件
  • 股权转让是否需要全体股东签字
  • 收到对方开的红字发票怎么做账
  • 无形资产与固定资产一样都会存在实体性贬值
  • 车辆违章有几种处理方法
  • 综合所得预扣预缴表校验结果以下人员未报送
  • 交易性金融资产公允价值变动计入
  • 明细账示例图
  • mysql免安装版本
  • 怎样备份微信聊天记录到新手机
  • 文件选项夹在哪里
  • win10开机提醒
  • 电脑xp系统桌面
  • smsss.exe - smsss是什么进程
  • SsAAD.exe - SsAAD是什么进程
  • 13寸的macbook
  • f_00000e是什么文件
  • pascl32.exe - pascl32是什么进程 有什么用
  • cocos2dx视频教程
  • Unity3D游戏开发(第2版)pdf
  • shell编程总结
  • shell嵌套for循环
  • Python 安装模块
  • android基于linux还是unix
  • 深入浅出html pdf中文版
  • 深圳市福田区税务局电话
  • 医保断交一年怎么续交
  • 广东省国家税务总局稽查局局长
  • 湖南社保卡怎么网上缴费
  • 定额发票作废了还能报销吗
  • 海宁到许村公交车路线
  • 免责声明:网站部分图片文字素材来源于网络,如有侵权,请及时告知,我们会第一时间删除,谢谢! 邮箱:opceo@qq.com

    鄂ICP备2023003026号