关于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 相关文章推荐
JS实现图片预加载无需等待
Dec 21 Javascript
javascript日期对象格式化为字符串的实现方法
Jan 14 Javascript
jQuery页面元素动态添加后绑定事件丢失方法,非 live
Jun 16 Javascript
原生js实现tab选项卡切换
Mar 23 Javascript
微信小程序 Audio API详解及实例代码
Sep 30 Javascript
详解Vue-cli代理解决跨域问题
Sep 27 Javascript
vue强制刷新组件的方法示例
Feb 28 Javascript
ajaxfileupload.js实现上传文件功能
Apr 19 Javascript
微信小程序如何刷新当前界面的实现方法
Jun 07 Javascript
微信小程序 如何获取网络状态
Jul 26 Javascript
基于JavaScript实现猜数字游戏代码实例
Jul 30 Javascript
JavaScript实现前端网页版倒计时
Mar 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
使用PHP实现密保卡功能实现代码<打包下载直接运行>
2011/10/09 PHP
php微信浏览器分享设置以及回调详解
2016/08/01 PHP
php in_array() 检查数组中是否存在某个值详解
2016/11/23 PHP
yii使用bootstrap分页样式的实例
2017/01/17 PHP
PHP微信企业号开发之回调模式开启与用法示例
2017/11/25 PHP
比较详细的关于javascript中void(0)的具体含义解释
2007/08/02 Javascript
iframe 上下滚动条如何默认在下方实现原理
2012/12/10 Javascript
12种不宜使用的Javascript语法整理
2013/11/04 Javascript
jQuery遍历DOM元素与节点方法详解
2016/04/14 Javascript
jquery+html仿翻页相册功能
2016/12/20 Javascript
值得收藏的vuejs安装教程
2017/11/21 Javascript
在 vue-cli v3.0 中使用 SCSS/SASS的方法
2018/06/14 Javascript
webstorm+vue初始化项目的方法
2018/10/18 Javascript
JavaScript中的垃圾回收与内存泄漏示例详解
2019/05/02 Javascript
python控制台显示时钟的示例
2014/02/24 Python
windows下python模拟鼠标点击和键盘输示例
2014/02/28 Python
Python Queue模块详细介绍及实例
2016/12/27 Python
python数据抓取分析的示例代码(python + mongodb)
2017/12/25 Python
DataFrame:通过SparkSql将scala类转为DataFrame的方法
2019/01/29 Python
django url到views参数传递的实例
2019/07/19 Python
CentOS7下安装python3.6.8的教程详解
2020/01/03 Python
Ranorex通过Python将报告发送到邮箱的方法
2020/01/12 Python
全面介绍python中很常用的单元测试框架unitest
2020/12/14 Python
使用Python封装excel操作指南
2021/01/29 Python
Jabra捷波朗美国官网:用于办公、车载和运动的无线蓝牙耳麦
2017/02/01 全球购物
size?爱尔兰官方网站:英国伦敦的球鞋精品店
2019/03/31 全球购物
中学生学习生活的自我评价
2013/10/26 职场文书
物业工作计划书
2014/01/10 职场文书
班级道德讲堂实施方案
2014/02/24 职场文书
2015年电话销售工作总结范文
2015/04/20 职场文书
信用卡收入证明范本
2015/06/12 职场文书
2015年清剿火患专项行动工作总结
2015/07/27 职场文书
小学教师教学随笔
2015/08/14 职场文书
利用Python第三方库实现预测NBA比赛结果
2021/06/21 Python
使用nginx配置访问wgcloud的方法
2021/06/26 Servers
MySQL派生表联表查询实战过程
2022/03/20 MySQL