关于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,超强推荐expand.js
Dec 23 Javascript
Ext grid 添加右击菜单
Nov 26 Javascript
mysql输出数据赋给js变量报unterminated string literal错误原因
May 22 Javascript
通过点击jqgrid表格弹出需要的表格数据
Dec 02 Javascript
jQuery简单实现页面元素置顶时悬浮效果示例
Aug 01 Javascript
JS中的hasOwnProperty()、propertyIsEnumerable()和isPrototypeOf()
Aug 11 Javascript
微信小程序 icon组件详细及实例代码
Oct 25 Javascript
JS实现侧边栏鼠标经过弹出框+缓冲效果
Mar 29 Javascript
jQuery实现的弹幕效果完整实例
Sep 06 jQuery
js实现随机点名程序
Sep 17 Javascript
node.js通过Sequelize 连接MySQL的方法
Dec 28 Javascript
js实现简单图片拖拽效果
Feb 22 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+Mysqli利用事务处理转账问题实例
2015/02/11 PHP
PHP判断一个字符串是否是回文字符串的方法
2015/03/23 PHP
PHP模型Model类封装数据库操作示例
2019/03/14 PHP
Javascript 二维数组
2009/11/26 Javascript
jQuery源码分析-02正则表达式 RegExp 常用正则表达式
2011/11/14 Javascript
在新窗口打开超链接的方法小结
2013/04/14 Javascript
jQuery中json对象的复制方式介绍(数组及对象)
2013/06/08 Javascript
js选择并转移导航菜单示例代码
2014/08/19 Javascript
jQuery选择器全集详解
2014/11/24 Javascript
JS打开新窗口防止被浏览器阻止的方法
2015/01/03 Javascript
JS的数组迭代方法
2015/02/05 Javascript
jQuery的bind()方法使用详解
2015/07/15 Javascript
javascript使用输出语句实现网页特效代码
2015/08/06 Javascript
js实现超酷的照片墙展示效果图附源码下载
2015/10/08 Javascript
js倒计时显示实例
2016/12/11 Javascript
微信小程序五星评分效果实现代码
2017/04/06 Javascript
Popup弹出框添加数据实现方法
2017/10/27 Javascript
基于node打包可执行文件工具_Pkg使用心得分享
2018/01/24 Javascript
mock.js实现模拟生成假数据功能示例
2019/01/15 Javascript
react国际化化插件react-i18n-auto使用详解
2020/03/31 Javascript
vue中后端做Excel导出功能返回数据流前端的处理操作
2020/09/08 Javascript
Python 列表(List)操作方法详解
2014/03/11 Python
Python实用日期时间处理方法汇总
2015/05/09 Python
Python 类的继承实例详解
2017/03/25 Python
python实现list元素按关键字相加减的方法示例
2017/06/09 Python
Python读取文件内容的三种常用方式及效率比较
2017/10/07 Python
python pandas.DataFrame选取、修改数据最好用.loc,.iloc,.ix实现
2018/06/11 Python
python中def是做什么的
2020/06/10 Python
python使用列表的最佳方案
2020/08/12 Python
医学生自荐信范文
2013/12/03 职场文书
优秀公益广告词大全
2014/03/19 职场文书
春节联欢晚会主持词范文
2014/03/24 职场文书
公司活动总结范文
2014/07/01 职场文书
运动会新闻报道稿
2015/07/22 职场文书
采购部2015年度工作总结
2015/07/24 职场文书
MySQL查询日期时间
2022/05/15 MySQL