关于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中操作Mysql数据库实例
Apr 02 Javascript
JavaScript实现将UPC转换成ISBN的方法
May 26 Javascript
基于JS实现数字+字母+中文的混合排序方法
Jun 06 Javascript
JQuery实现文字无缝滚动效果示例代码(Marquee插件)
Mar 07 Javascript
基于vue实现swipe轮播组件实例代码
May 24 Javascript
jQuery菜单实例(全选,反选,取消)
Aug 28 jQuery
深入理解Vue生命周期、手动挂载及挂载子组件
Sep 27 Javascript
在layui中使用form表单监听ajax异步验证注册的实例
Sep 03 Javascript
js实现计算器功能
Aug 10 Javascript
electron踩坑之dialog中的callback解决
Oct 06 Javascript
JavaScript中条件语句的优化技巧总结
Dec 04 Javascript
js实现简单的轮播图效果
Dec 13 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 eval函数用法 PHP中eval()函数小技巧
2012/10/31 PHP
简单实用的.net DataTable导出Execl
2013/10/28 PHP
PHP图片自动裁切应付不同尺寸的显示
2014/10/16 PHP
一个非常完美的读写ini格式的PHP配置类分享
2015/02/12 PHP
php源码分析之DZX1.5字符串截断函数cutstr用法
2015/06/17 PHP
php有效防止同一用户多次登录
2015/11/19 PHP
php并发加锁示例
2016/10/17 PHP
PHP环境搭建(php+Apache+mysql)
2016/11/14 PHP
JavaScript高级程序设计 阅读笔记(十二) js内置对象Math
2012/08/14 Javascript
基于jquery的文章中所有图片width大小批量设置方法
2013/08/01 Javascript
JS关键字球状旋转效果的实例代码
2013/11/29 Javascript
js实现iframe自动自适应高度的方法
2015/02/17 Javascript
javascript每日必学之封装
2016/02/23 Javascript
DOM操作和jQuery实现选项移动操作的简单实例
2016/06/07 Javascript
AngularJS中的表单简单入门
2016/07/28 Javascript
JavaScript数据结构之二叉树的删除算法示例
2017/04/13 Javascript
微信小程序实战之自定义模态弹窗(8)
2017/04/18 Javascript
VUE实现一个分页组件的示例
2017/09/13 Javascript
Vue.js自定义事件的表单输入组件方法
2018/03/08 Javascript
node.js自动上传ftp的脚本分享
2018/06/16 Javascript
vue+iview+less 实现换肤功能
2018/08/17 Javascript
vue自定义指令directive的使用方法
2019/04/07 Javascript
解决vue打包报错Unexpected token: punc的问题
2020/10/24 Javascript
JavaScript实现缓动动画
2020/11/25 Javascript
flask中使用蓝图将路由分开写在不同文件实例解析
2018/01/19 Python
Python动刷新抢12306火车票的代码(附源码)
2018/01/24 Python
python3.8.1+selenium实现登录滑块验证功能
2020/05/22 Python
C#如何调用Word并打开一个Word文档
2013/05/08 面试题
出纳岗位职责模板
2013/11/27 职场文书
中学生操行评语大全
2014/04/24 职场文书
信息管理专业自荐书
2014/06/05 职场文书
宣传活动总结范文
2014/07/01 职场文书
委托书的写法
2014/09/16 职场文书
大学生翘课检讨书范文
2014/10/06 职场文书
先进个人事迹材料
2014/12/29 职场文书
OpenCV-Python实现轮廓拟合
2021/06/08 Python