首先我们先看一段代码,这是一个实现倒数功能的类「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小时内与您取得联系。