关于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基础第一章 JavaScript与用户端
Jul 22 Javascript
setTimeout自动触发一个js的方法
Jan 15 Javascript
使用js实现一个可编辑的select下拉列表
Feb 20 Javascript
js+html5实现canvas绘制圆形图案的方法
Jun 05 Javascript
基于ES6 Array.of的用法(实例讲解)
Sep 05 Javascript
Node.js进阶之核心模块https入门
May 23 Javascript
Vue框架TypeScript装饰器使用指南小结
Feb 18 Javascript
微信小程序网络层封装的实现(promise, 登录锁)
May 08 Javascript
js实现内置计时器
Dec 16 Javascript
Vue页面跳转传递参数及接收方式
Sep 09 Javascript
适用于 Vue 的播放器组件Vue-Video-Player操作
Nov 16 Javascript
详解vue中使用transition和animation的实例代码
Dec 12 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
2006/10/09 PHP
PHP页面间传递参数实例代码
2008/06/05 PHP
PHP获取windows登录用户名的方法
2014/06/24 PHP
thinkphp普通查询与表达式查询实例分析
2014/11/24 PHP
PHP获取日期对应星期、一周日期、星期开始与结束日期的方法
2018/06/22 PHP
Laravel5.5以下版本中如何自定义日志行为详解
2018/08/01 PHP
Laravel 框架控制器 Controller原理与用法实例分析
2020/04/14 PHP
基于jquery的滑动样例代码
2010/11/20 Javascript
js解析与序列化json数据(三)json的解析探讨
2013/02/01 Javascript
js使用post 方式打开新窗口
2015/02/26 Javascript
JS+CSS实现自动改变切换方向图片幻灯切换效果的方法
2015/03/02 Javascript
JS实现双击编辑可修改状态的方法
2015/08/14 Javascript
jQuery获取父元素节点、子元素节点及兄弟元素节点的方法
2016/04/14 Javascript
jquery 实现复选框的全选操作实例代码
2017/01/24 Javascript
bootstrap实现的自适应页面简单应用示例
2017/03/09 Javascript
jQuery实现可拖动进度条实例代码
2017/06/21 jQuery
input输入框内容实时监测(附代码)
2017/08/15 Javascript
vue给input file绑定函数获取当前上传的对象完美实现方法
2017/12/15 Javascript
JS实现的汉字与Unicode码相互转化功能分析
2018/05/25 Javascript
微信小程序 高德地图路线规划实现过程详解
2019/08/05 Javascript
JavaScript对象字面量和构造函数原理与用法详解
2020/04/18 Javascript
python单元测试unittest实例详解
2015/05/11 Python
Python爬虫模拟登录带验证码网站
2016/01/22 Python
Python批量提取PDF文件中文本的脚本
2018/03/14 Python
python爬虫之xpath的基本使用详解
2018/04/18 Python
python 读取文件并把矩阵转成numpy的两种方法
2019/02/12 Python
python全栈要学什么 python全栈学习路线
2019/06/28 Python
Python数据类型之列表和元组的方法实例详解
2019/07/08 Python
python爬虫添加请求头代码实例
2019/12/28 Python
Python实现手绘图效果实例分享
2020/07/22 Python
python开发入门——列表生成式
2020/09/03 Python
CSS3之多背景background使用示例
2013/10/18 HTML / CSS
医大实习自我鉴定
2013/12/07 职场文书
党员思想汇报范文
2013/12/30 职场文书
学校联谊活动方案
2014/02/15 职场文书
聘任书格式及范文
2015/09/21 职场文书