关于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 相关文章推荐
JavaScript setTimeout和setInterval的使用方法 说明
Mar 25 Javascript
固定网页背景图同时保持图片比例的思路代码
Aug 15 Javascript
键盘KeyCode值列表汇总
Nov 26 Javascript
Node.js抓取中文网页乱码问题和解决方法
Feb 10 Javascript
jQuery mobile 移动web(6)
Dec 20 Javascript
vue动态组件实现选项卡切换效果
Mar 08 Javascript
node.js(express)中使用Jcrop进行图片剪切上传功能
Apr 21 Javascript
React Native AsyncStorage本地存储工具类
Oct 24 Javascript
微信小程序日期时间选择器使用方法
Feb 01 Javascript
详解Vue.js自定义tipOnce指令用法实例
Dec 19 Javascript
JavaScript实现与使用发布/订阅模式详解
Jan 19 Javascript
vue+element UI实现树形表格
Dec 29 Vue.js
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压缩HTML函数轻松实现压缩html/js/Css及注意事项
2013/01/27 PHP
探讨各种PHP字符串函数的总结分析
2013/06/05 PHP
PHP实现的简单mock json脚本分享
2015/02/10 PHP
tp5框架基于ajax实现异步删除图片的方法示例
2020/02/10 PHP
Javascript & DHTML 实例编程(教程)DOM基础和基本API
2007/06/02 Javascript
JavaScript入门教程(9) Document文档对象
2009/01/31 Javascript
javascript 获取select下拉列表值的代码
2009/09/07 Javascript
jQuery学习7 操作JavaScript对象和集合的函数
2010/02/07 Javascript
js 在定义的时候立即执行的函数表达式(function)写法
2013/01/16 Javascript
纯css+js写的一个简单的tab标签页带样式
2014/01/28 Javascript
jQuery插件imgPreviewQs实现上传图片预览
2016/01/15 Javascript
关于vue.js过渡css类名的理解(推荐)
2017/04/10 Javascript
Javascript中 toFixed四舍六入方法
2017/08/21 Javascript
vue脚手架中配置Sass的方法
2018/01/04 Javascript
vue实现中部导航栏布局功能
2019/07/30 Javascript
用js编写留言板
2020/03/17 Javascript
[00:34]TI7不朽珍藏III——地穴编织者不朽展示
2017/07/15 DOTA
[01:15:56]2018DOTA2亚洲邀请赛3月30日 小组赛A组 TNC VS Newbee
2018/03/31 DOTA
Python编程中的文件操作攻略
2015/10/16 Python
Python多线程、异步+多进程爬虫实现代码
2016/02/17 Python
Python中第三方库Requests库的高级用法详解
2017/03/12 Python
python opencv旋转图像(保持图像不被裁减)
2018/07/26 Python
将string类型的数据类型转换为spark rdd时报错的解决方法
2019/02/18 Python
Python 正则表达式爬虫使用案例解析
2019/09/23 Python
python 输出列表元素实例(以空格/逗号为分隔符)
2019/12/25 Python
python连接mysql数据库并读取数据的实现
2020/09/25 Python
潘多拉意大利官方网上商城:网上选购PANDORA珠宝
2018/10/07 全球购物
法学专业个人求职信
2013/09/26 职场文书
社会保险接收函
2014/01/12 职场文书
酒店行政人事部经理职务说明书
2014/02/26 职场文书
交通事故调解协议书
2014/04/16 职场文书
党的群众路线教育实践活动批评与自我批评范文
2014/10/16 职场文书
2014年旅游局法制宣传日活动总结
2014/11/01 职场文书
小学见习报告
2015/06/23 职场文书
《巨人的花园》教学反思
2016/02/19 职场文书
遇事可以测出您的见识与格局
2019/09/16 职场文书