位置: 编程技术 - 正文

ES6中javascript实现函数绑定及类的事件绑定功能详解

编辑:rootadmin

推荐整理分享ES6中javascript实现函数绑定及类的事件绑定功能详解,希望有所帮助,仅作参考,欢迎阅读内容。

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

本文实例讲述了ES6中javascript实现函数绑定及类的事件绑定功能的方法。分享给大家供大家参考,具体如下:

函数绑定

箭头函数可以绑定this对象,大大减少了显式绑定this对象的写法(call、apply、bind)。但是,箭头函数并不适用于所有场合,所以 ES7 提出了 “ 函数绑定 ” ( function bind )运算符,用来取代call、apply、bind调用。虽然该语法还是 ES7 的一个提案,但是 Babel 转码器已经支持。

函数绑定运算符是并排的两个双冒号( :: ),双冒号左边是一个对象,右边是一个函数。该运算符会自动将左边的对象,作为上下文环境(即 this 对象),绑定到右边的函数上面。

如果双冒号左边为空,右边是一个对象的方法,则等于将该方法绑定在该对象上面。

由于双冒号运算符返回的还是原对象,因此可以采用链式写法。

类中事件绑定

概述

ES6提供了类,给模块化带来了很大的帮助。在类里面绑定事件,一来是为了使得代码结构清晰,二来是为了可以使用类的变量和方法。但是,由于事件的回调函数并不是由类的实例对象触发,所以,事件回调函数里面并不能访问类的this变量。另外,我们也不希望事件回调函数对外暴露,免得调用者直接调用。

简单来说,我们就希望:

1. 事件回调函数要能访问类的this变量2. 事件回调函数不能直接调用

如何访问类的this

方案一:将类的this保存成一个局部变量

this的指代是动态改变的,但是局部变量的指代却是明确的,并且,函数定义的局部变量在整个函数里面都可以用。所以,我们可以使用let that = this保存类的this变量。

ES6中javascript实现函数绑定及类的事件绑定功能详解

这种方法只在使用jquery时有用,因为jquery解绑事件不需要提供回调函数,直接off就可以了。但是原生js需要提供回调函数也有它的道理,因为同一个元素的同一种事件可以绑定多个回调函数,所以你需要指出释放哪一个。

方案二:使用bind()改变this的指向

有类A,在A中要添加mousemove事件,根据需求写出下面代码:

但是,这样获取不到类的this。onMouseMove的this将会指向document。因为事件是添加到document上的,所以自然是由document触发事件并调用onMouseMove进行处理,所以onMouseMove中的this指向document。

比较正确的做法是:使用bind()函数改变onMouseMove中this的指向,同时将事件回调函数移到类外面:

但是这样仍然存在问题,事件移除不掉了!因为this.bind()每次调用都会返回一个新的函数,所以:

两者的第二个参数并不相同。

正确的做法是: 将bind()的结果保存到一个变量中:

如何定义私有的事件回调函数

在Java中,不想对外暴露的方法可以定义为私有方法,但是ES6并没有提供私有方法,只能通过一些办法模拟。但是,事件回调函数比较特别,因为事件除了定义,还要移除,这会带来额外的麻烦。但还是有办法的:

使用Symbol变量来定义

Symbol("_onMouseMove")会产生一个唯一的值,这个值是在对象创建的时候才生成的,所以,调用者没有办法在写代码时知道这个值的,所以,就无法调用使用这个值命名的方法了,这样就定义了一个私有方法。

更多相关内容可查看本站专题:《ECMAScript6(ES6)入门教程》、《JavaScript数组操作技巧总结》、《JavaScript字符与字符串操作技巧总结》、《JavaScript数据结构与算法技巧总结》、《JavaScript错误与调试技巧总结》及《javascript面向对象入门教程》

希望本文所述对大家基于ECMAScript的程序设计有所帮助。

javascript自定义事件功能与用法实例分析 本文实例讲述了javascript自定义事件功能与用法。分享给大家供大家参考,具体如下:概述自定义事件很难派上用场?为什么自定义事件很难派上用场,

js使用xml数据载体实现城市省份二级联动效果 本文实例为大家分享了使用xml数据载体实现城市省份二级联动的具体代码,供大家参考,具体内容如下首先写好前台页面testProvince.jsp,将请求通过open、

详解用webpack的CommonsChunkPlugin提取公共代码的3种方式 Webpack的CommonsChunkPlugin插件,负责将多次被使用的JS模块打包在一起。CommonsChunkPlugin能解决的问题在使用插件前,考虑几个问题:对哪些chunk进行提取,这

标签: ES6中javascript实现函数绑定及类的事件绑定功能详解

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

上一篇:thinkjs 文件上传功能实例代码(js的上传文件)

下一篇:javascript自定义事件功能与用法实例分析(javascript自定义属性)

  • 正常工资薪金包括年终奖吗
  • 捐赠支出纳税调减
  • 建筑劳务公司的工资计入什么科目
  • 免交的附加税需要计提吗
  • 可以先抵扣下个月的进项票吗
  • 单位承担的社保费用计入应付职工薪酬科目吗
  • 残疾人就业保障金征收使用管理办法
  • 商业承兑汇票利息什么时候支付
  • 向境外销售货物交增值税吗?
  • 会计科目的设置
  • 母公司吸收合并全资子公司土地增值税
  • 所得税预缴申报表中营业成本怎么计算
  • 汇票的票据行为有贴现吗
  • 工程预付款增值税缴纳办法
  • 可供分配利润包含哪些
  • 银行回单少了一笔
  • 暂估入账估低了怎么办
  • 企业没有收入怎么办
  • 叉车在固定资产里叫什么
  • 工厂出租厂房税率
  • 利用发票管税的意义
  • 金银首饰零售消费税税收优惠
  • 汽车折旧计算方法按照公里
  • 增值税减少对企业的利弊
  • 收到投资款怎么做记账凭证
  • 代订机票的电子专用发票可以抵扣吗
  • 鸿蒙系统与安卓对比
  • php用户登录用的什么技术
  • 苹果mac修改用户名和密码
  • KunlunPlatform.exe是什么进程?KunlunPlatform.exe是安全的程序吗?
  • 百度有钱花借钱会上征信吗
  • 怀特岛郡国旗
  • 会计科目在建工程有金额要求吗
  • 按工资额提取福利费
  • 分配利润的会计科目
  • 微信小程序下单可以退款吗
  • 提取的坏账准备使用完后如何处理
  • yii2开发文档
  • vue ts
  • sortable js
  • 残疾证哪里发
  • python字典删除键值对方法
  • 不确认收款退款对方还能收到钱么?
  • 彩钢板房税点
  • 应收的货款
  • 进项税额转出都需要开具红字发票吗
  • 清算的基本流程
  • 企业固定资产折旧可以按照其价值和使用情况
  • 物业公司的会计好干吗
  • 以经营房产投资合营收固定收益如何开发票?
  • 厂区地面硬化施工方案
  • 企业营业外收入要交所得税吗
  • 进项已抵扣,退货发票怎么处理
  • 个人独资企业个体工商户的区别
  • 成本结转怎么结转
  • 增值税收入的确认时间
  • 本年收益属于什么科目
  • 应收款挂账是什么意思
  • 固定资产专票可以不抵扣吗
  • win10系统更新后有问题如何恢复
  • windows8开机慢怎么办
  • linux 查看指定行
  • win7系统电脑怎么连接wifi
  • win7如何限制网速
  • Win8系统怎么安装
  • linux可视化界面怎么输入代码
  • win10生物识别
  • myeclipse2013安装配置
  • bat批处理命令大全
  • python中的变量赋值
  • 浅析Javascript ES6中的原生Promise
  • Node.js中的全局变量有哪些
  • 安卓开发遇到的问题
  • python抓取网络数据
  • linux的gunzip命令
  • 办理税控盘的流程
  • 加油站怎么收税
  • 卷烟批发环节的税率
  • 预交增值税税款退税流程
  • 三门峡哪个小区是原火葬场
  • 免责声明:网站部分图片文字素材来源于网络,如有侵权,请及时告知,我们会第一时间删除,谢谢! 邮箱:opceo@qq.com

    鄂ICP备2023003026号

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

    友情链接: 武汉网站建设