关于ES6箭头函数中的this问题


Posted in Javascript onFebruary 27, 2018

简要介绍:箭头函数中的this,指向与一般function定义的函数不同,箭头函数this的定义:箭头函数中的this是在定义函数的时候绑定,而不是在执行函数的时候绑定。

(1)一般函数this指向在执行是绑定  当运行obj.say()时候,this指向的是obj这个对象。

var x=11;
var obj={
 x:22,
 say:function(){
 console.log(this.x)
 }
}
obj.say();
//console.log输出的是22

(2)所谓的定义时候绑定,就是this是继承自父执行上下文!!中的this,比如这里的箭头函数中的this.x,箭头函数本身与say平级以key:value的形式,也就是箭头函数本身所在的对象为obj,而obj的父执行上下文就是window,因此这里的this.x实际上表示的是window.x,因此输出的是11。

var x=11;
var obj={
 x:22,
 say:()=>{
 console.log(this.x);
 }
}
obj.say();
//输出的值为11

类似的还有:

(3)

var a=11
function test1(){
 this.a=22;
 let b=function(){
 console.log(this.a);
 };
 b();
}
var x=new test1();

输出11 

箭头函数情况:

var a=11;
function test2(){
 this.a=22;
 let b=()=>{console.log(this.a)}
 b();
}
var x=new test2();
//输出22

很奇怪对不对,我是这样理解的,ES6中定义的时候绑定this的具体含义,应该继承的是父执行上下文里面的this,切忌是父执行上下文!!!这样就很多箭头函数中的指向不明确就迎刃而解了。

注意:简单对象(非函数)是没有执行上下文的!

深入理解箭头函数中的this

箭头函数中,this指向的固定化,并不是因为箭头函数内部有绑定this的机制,实际原因是箭头函数根本没有自己的this,导致内部的this就是外层代码块的this。正是因为它没有this,所以也就不能用作构造函数。

我们可以来模拟ES5中的箭头函数转化:

// ES6
function foo() {
 setTimeout(() => {
 console.log('id:', this.id);
 }, 100);
}
// ES5
function foo() {
 var _this = this;

 setTimeout(function () {
 console.log('id:', _this.id);
 }, 100);
}

所以在定义对象的时候,定义对象属性,里面的this指向的一般是全局,或者这个对象所在的那个环境中的this。

总结

以上所述是小编给大家介绍的ES6箭头函数中的this,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对三水点靠木网站的支持!

Javascript 相关文章推荐
使用 TypeScript 重新编写的 JavaScript 坦克大战游戏代码
Apr 07 Javascript
js计算文本框输入的字符数
Oct 23 Javascript
ECMA5数组的新增方法有哪些及forEach()模仿实现
Nov 03 Javascript
JS验证 只能输入小数点,数字,负数的实现方法
Oct 07 Javascript
JavaScript易错知识点整理
Dec 05 Javascript
bootstrap提示标签、提示框实现代码
Dec 28 Javascript
jQuery插件HighCharts绘制2D圆环图效果示例【附demo源码下载】
Mar 09 Javascript
深入理解Javascript中的作用域链和闭包
Apr 25 Javascript
angular2中使用第三方js库的实例
Feb 26 Javascript
JS动画实现回调地狱promise的实例代码详解
Nov 08 Javascript
js中事件对象和事件委托的介绍
Jan 21 Javascript
mpvue微信小程序开发之实现一个弹幕评论
Nov 24 Javascript
vue中echarts3.0自适应的方法
Feb 26 #Javascript
swiper 解决动态加载数据滑动失效的问题
Feb 26 #Javascript
解决Angular.js中使用Swiper插件不能滑动的问题
Feb 26 #Javascript
Angular5中调用第三方js插件的方法
Feb 26 #Javascript
angular2中使用第三方js库的实例
Feb 26 #Javascript
vue 子组件向父组件传值方法
Feb 26 #Javascript
vue2 前端搜索实现示例
Feb 26 #Javascript
You might like
【动漫杂谈】关于《请在T台上微笑》
2020/03/03 日漫
php一个找二层目录的小东东
2012/08/02 PHP
Linux下安装oracle客户端并配置php5.3
2014/10/12 PHP
[原创]解决wincache不支持64位PHP5.5/5.6的问题(提供64位wincache下载)
2016/06/22 PHP
PHP中Trait及其应用详解
2017/02/14 PHP
基本jquery的控制tabs打开的数量的代码
2010/10/17 Javascript
jquery常用方法及使用示例汇总
2014/11/08 Javascript
javaScript中slice函数用法实例分析
2015/06/08 Javascript
关于JS中match() 和 exec() 返回值和属性的测试
2016/03/21 Javascript
jQuery实现根据滚动条位置加载相应内容功能
2016/07/18 Javascript
Javascript实现购物车功能的详细代码
2018/05/08 Javascript
IE浏览器下JS脚本提交表单后,不能自动提示问题解决方法
2019/06/04 Javascript
阿望教你用vue写扫雷小游戏
2020/01/20 Javascript
深入了解JavaScript词法作用域
2020/07/29 Javascript
vue实现顶部菜单栏
2020/11/08 Javascript
[42:56]VGJ.S vs Serenity 2018国际邀请赛小组赛BO2 第二场 8.19
2018/08/21 DOTA
python求列表交集的方法汇总
2014/11/10 Python
Python 实现网页自动截图的示例讲解
2018/05/17 Python
django2用iframe标签完成网页内嵌播放b站视频功能
2018/06/20 Python
python微信聊天机器人改进版(定时或触发抓取天气预报、励志语录等,向好友推送)
2019/04/25 Python
使用Python进行体育竞技分析(预测球队成绩)
2019/05/16 Python
如何用Python来搭建一个简单的推荐系统
2019/08/07 Python
Django实现内容缓存实例方法
2020/06/30 Python
pandas实现导出数据的四种方式
2020/12/13 Python
python脚本定时发送邮件
2020/12/22 Python
Flask中jinja2的继承实现方法及实例
2021/03/03 Python
CSS3 border-radius圆角的实现方法及用法详解
2020/09/14 HTML / CSS
苹果中国官方网站:Apple中国
2016/07/22 全球购物
JD Sports法国:英国篮球和运动时尚的领导者
2017/09/28 全球购物
软件工程毕业生自荐信
2014/07/04 职场文书
课程设计的心得体会
2014/09/03 职场文书
环境工程专业毕业生求职信
2014/09/30 职场文书
教师个人总结范文
2015/02/11 职场文书
公安忠诚教育心得体会
2016/01/23 职场文书
Python 如何安装Selenium
2021/05/06 Python
JS class语法糖的深入剖析
2022/07/07 Javascript