全网整合营销服务商

电脑端+手机端+微信端=数据同步管理

免费咨询热线:400-708-3566

深入理解Javascript箭头函数中的this

首先我们先看一段代码,这是一个实现倒数功能的类「Countdown」及其实例化的过程:

function Countdown(seconds) {
 this._seconds = seconds;
}
Countdown.prototype._step = function() {
 console.log(this._seconds);
 if (this._seconds > 0) {
  this._seconds -= 1;
 } else {
  clearInterval(this._timer);
 }
};
Countdown.prototype.start = function() {
 this._step();
 this._timer = setInterval(function() {
  this._step();
 }, 1000);
};

new Countdown(10).start();

运行这段代码时,将会出现异常「this._step is not a function」。

这是Javascript中颇受诟病的「this错乱」问题:setInterval重复执行的函数中的this已经跟外部的this不一致了。

要解决这个问题,有三个方法。

闭包

新增一个变量指向期望的this,然后将该变量放到闭包中:

Countdown.prototype.start = function() {
 var self = this;
 this._step();
 this._timer = setInterval(function() {
  self._step();
 }, 1000);
};

bind函数

ES5给函数类型新增的「bind」方法可以改变函数(实际上是返回了一个新的函数)的「this」:

Countdown.prototype.start = function() {
  this._step();
  this._timer = setInterval(function() {
    this._step();
  }.bind(this), 1000);
};

箭头函数

这正是本文要重点介绍的解决方案。箭头函数是ES6中新增的语言特性,表面上看,它只是使匿名函数的编码更加简短,但实际上它还隐藏了一个非常重要的细节——箭头函数会捕获其所在上下文的this作为自己的this。也就是说,箭头函数内部与其外部的this是保持一致的。

所以,解决方案如下:

Countdown.prototype.start = function() {
  this._step();
  this._timer = setInterval(() => {
    this._step();
  }, 1000);
};

这无疑使this的处理更加方便了。然而,对各位Javascript Coder而言,判断this指向时的情况可就又多了一种了。

总结

以上就是这篇文章的全部内容了,希望本文的内容对大家的学习或者工作能带来一定的帮助,如果有疑问大家可以留言交流。


# 箭头函数  # this  # es6  # js  # JavaScript中的普通函数和箭头函数的区别和用法详解  # 深入理解JavaScript中的箭头函数  # JavaScript箭头(arrow)函数详解  # JavaScript箭头函数中的this详解  # JS中箭头函数与this的写法和理解  # 深入理解JavaScript 箭头函数  # JavaScript箭头函数的五种使用方法及三点注意事项  # JavaScript中箭头函数与普通函数的区别详解  # 一文彻底讲通JavaScript普通函数与箭头函数的区别  # 自己的  # 这是  # 将会  # 这段  # 这是一个  # 上看  # 可就  # 非常重要  # 这篇文章  # 在上  # 它还  # 其所  # 又多  # 将该  # 先看  # 解决这个问题  # 颇受  # 种了  # 包中  # 便了 


相关文章: 已有域名能否直接搭建网站?  如何通过万网虚拟主机快速搭建网站?  建站主机如何选?高性价比方案全解析  西安市网站制作公司,哪个相亲网站比较好?西安比较好的相亲网站?  定制建站流程步骤详解:一站式方案设计与开发指南  建站之星后台密码遗忘或太弱?如何重置与强化?  定制建站哪家更专业可靠?推荐榜单揭晓  高端企业智能建站程序:SEO优化与响应式模板定制开发  如何通过远程VPS快速搭建个人网站?  宝塔建站教程:一键部署配置流程与SEO优化实战指南  如何在橙子建站上传落地页?操作指南详解  如何在景安服务器上快速搭建个人网站?  如何用wdcp快速搭建高效网站?  建站之星如何防范黑客攻击与数据泄露?  小建面朝正北,A点实际方位是否存在偏差?  Dapper的Execute方法的返回值是什么意思 Dapper Execute返回值详解  成都网站制作报价公司,成都工业用气开户费用?  专业网站设计制作公司,如何制作一个企业网站,建设网站的基本步骤有哪些?  电商网站制作价格怎么算,网上拍卖流程以及规则?  如何规划企业建站流程的关键步骤?  一键制作网站软件下载安装,一键自动采集网页文档制作步骤?  怎么制作网站设计模板图片,有电商商品详情页面的免费模板素材网站推荐吗?  实例解析angularjs的filter过滤器  一键网站制作软件,义乌购一件代发流程?  洛阳网站制作公司有哪些,洛阳的招聘网站都有哪些?  北京网站制作网页,网站升级改版需要多久?  香港服务器WordPress建站指南:SEO优化与高效部署策略  Android滚轮选择时间控件使用详解  *服务器网站为何频现安全漏洞?  如何在阿里云购买域名并搭建网站?  无锡营销型网站制作公司,无锡网选车牌流程?  广州建站公司哪家好?十大优质服务商推荐  详解jQuery停止动画——stop()方法的使用  c++23 std::expected怎么用 c++优雅处理函数错误返回【详解】  家庭服务器如何搭建个人网站?  标准网站视频模板制作软件,现在有哪个网站的视频编辑素材最齐全的,背景音乐、音效等?  网站规划与制作是什么,电子商务网站系统规划的内容及步骤是什么?  ,在苏州找工作,上哪个网站比较好?  山东网站制作公司有哪些,山东大源集团官网?  北京建设网站制作公司,北京古代建筑博物馆预约官网?  网站图片在线制作软件,怎么在图片上做链接?  制作ppt免费网站有哪些,有哪些比较好的ppt模板下载网站?  网站app免费制作软件,能免费看各大网站视频的手机app?  如何在IIS中新建站点并配置端口与物理路径?  网站海报制作教学视频教程,有什么免费的高清可商用图片网站,用于海报设计?  西安制作网站公司有哪些,西安货运司机用的最多的app或者网站是什么?  如何处理“XML格式不正确”错误 常见XML well-formed问题解决方法  如何在香港免费服务器上快速搭建网站?  专业网站制作企业网站,如何制作一个企业网站,建设网站的基本步骤有哪些?  建站之星云端配置指南:模板选择与SEO优化一键生成 

您的项目需求

*请认真填写需求信息,我们会在24小时内与您取得联系。