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