全网整合营销服务商

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

免费咨询热线: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普通函数与箭头函数的区别  # 自己的  # 这是  # 将会  # 这段  # 这是一个  # 上看  # 可就  # 非常重要  # 这篇文章  # 在上  # 它还  # 其所  # 又多  # 将该  # 先看  # 解决这个问题  # 颇受  # 种了  # 包中  # 便了 


相关文章: 再谈Python中的字符串与字符编码(推荐)  外汇网站制作流程,如何在工商银行网站上做外汇买卖?  宝盒自助建站智能生成技巧:SEO优化与关键词设置指南  深圳网站制作费用多少钱,读秀,深圳文献港这样的网站很多只提供网上试读,但有些人只要提供试读的文章就能全篇下载,这个是怎么弄的?  深圳防火门网站制作公司,深圳中天明防火门怎么编码?  如何通过服务器快速搭建网站?完整步骤解析  文字头像制作网站推荐软件,醒图能自动配文字吗?  TestNG的testng.xml配置文件怎么写  c# 在高并发场景下,委托和接口调用的性能对比  ,在苏州找工作,上哪个网站比较好?  寿县云建站:智能SEO优化与多行业模板快速上线指南  建站之星微信建站一键生成小程序+多端营销系统  如何在Ubuntu系统下快速搭建WordPress个人网站?  济南企业网站制作公司,济南社保单位网上缴费步骤?  公司网站制作需要多少钱,找人做公司网站需要多少钱?  高性能网站服务器配置指南:安全稳定与高效建站核心方案  C++如何编写函数模板?(泛型编程入门)  如何在阿里云虚拟机上搭建网站?步骤解析与避坑指南  如何在香港服务器上快速搭建免备案网站?  网站制作怎么样才能赚钱,用自己的电脑做服务器架设网站有什么利弊,能赚钱吗?  潮流网站制作头像软件下载,适合母子的网名有哪些?  教育培训网站制作流程,请问edu教育网站的域名怎么申请?  小视频制作网站有哪些,有什么看国内小视频的网站,求推荐?  建站之星3.0如何解决常见操作问题?  如何配置WinSCP新建站点的密钥验证步骤?  建站ABC备案流程中有哪些关键注意事项?  企业微网站怎么做,公司网站和公众号有什么区别?  阿里云网站制作公司,阿里云快速搭建网站好用吗?  详解jQuery停止动画——stop()方法的使用  建站之星导航配置指南:自助建站与SEO优化全解析  如何用好域名打造高点击率的自主建站?  制作网站的网址是什么,请问后缀为.com和.com.cn还有.cn的这三种网站是分别是什么类型的网站?  一键制作网站软件下载安装,一键自动采集网页文档制作步骤?  如何登录建站主机?访问步骤全解析  江苏网站制作公司有哪些,江苏书法考级官方网站?  如何有效防御Web建站篡改攻击?  如何在云主机上快速搭建网站?  如何快速启动建站代理加盟业务?  建站之星如何快速解决建站难题?  车管所网站制作流程,交警当场开简易程序处罚决定书,在交警网站查询不到怎么办?  建站之星导航如何优化提升用户体验?  国美网站制作流程,国美电器蒸汽鍋怎么用官方网站?  魔方云NAT建站如何实现端口转发?  家庭建站与云服务器建站,如何选择更优?  如何在阿里云香港服务器快速搭建网站?  南阳网站制作公司推荐,小学电子版试卷去哪里找资源好?  Android自定义控件实现温度旋转按钮效果  广州网站制作公司哪家好一点,广州欧莱雅百库网络科技有限公司官网?  长春网站建设制作公司,长春的网络公司怎么样主要是能做网站的?  网站视频制作书签怎么做,ie浏览器怎么将网站固定在书签工具栏? 

您的项目需求

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