关于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 相关文章推荐
jquery tab标签页的制作
May 10 Javascript
深入理解JavaScript系列(1) 编写高质量JavaScript代码的基本要点
Jan 15 Javascript
js判断为空Null与字符串为空简写方法
Feb 24 Javascript
javascript实现网页子页面遍历回调的方法(涉及 window.frames、递归函数、函数上下文)
Jul 27 Javascript
用JS写的一个Ajax库(实例代码)
Aug 06 Javascript
js友好的时间返回函数
Aug 24 Javascript
BootStrap表单宽度设置方法
Mar 10 Javascript
jQuery滑动到底部加载下一页数据的实例代码
May 22 jQuery
JavaScript实现二维坐标点排序效果
Jul 18 Javascript
vue cli webpack中使用sass的方法
Feb 24 Javascript
微信小程序实现搜索框功能及踩过的坑
Jun 19 Javascript
antd vue 刷新保留当前页面路由,保留选中菜单,保留menu选中操作
Aug 06 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
第七节 类的静态成员 [7]
2006/10/09 PHP
3.从实例开始
2006/10/09 PHP
PHP语法速查表
2007/01/02 PHP
PHP 如何获取二维数组中某个key的集合
2014/06/03 PHP
php中使用GD库做验证码
2016/03/31 PHP
thinkPHP5.0框架自动加载机制分析
2017/03/18 PHP
PHP排序算法之堆排序(Heap Sort)实例详解
2018/04/21 PHP
JavaScript Object的extend是一个常用的功能
2009/12/02 Javascript
window.name代替cookie的实现代码
2010/11/28 Javascript
javascript学习笔记(九) js对象 设计模式
2012/06/19 Javascript
两种js监听滚轮事件的实现方法
2016/05/13 Javascript
微信小程序 轮播图swiper详解及实例(源码下载)
2017/01/11 Javascript
BackBone及其实例探究_动力节点Java学院整理
2017/07/14 Javascript
详解Vue路由钩子及应用场景(小结)
2017/11/07 Javascript
深入理解Vue官方文档梳理之全局API
2017/11/22 Javascript
浅谈MUI框架中加载外部网页或服务器数据的方法
2018/01/31 Javascript
关于jquery layui弹出层的使用方法
2018/04/21 jQuery
JavaScript的Object.defineProperty详解
2018/07/09 Javascript
JavaScript装饰者模式原理与用法实例详解
2020/03/09 Javascript
[57:55]完美世界DOTA2联赛PWL S3 Magma vs Phoenix 第二场 12.12
2020/12/16 DOTA
python使用xauth方式登录饭否网然后发消息
2014/04/11 Python
python处理PHP数组文本文件实例
2014/09/18 Python
详解在Python中处理异常的教程
2015/05/24 Python
磁盘垃圾文件清理器python代码实现
2020/08/24 Python
使用python将请求的requests headers参数格式化方法
2019/01/02 Python
使用Python脚本zabbix自定义key监控oracle连接状态
2019/08/28 Python
jupyter note 实现将数据保存为word
2020/04/14 Python
python如何删除列为空的行
2020/07/17 Python
美国最大的存储市场:SpareFoot
2018/07/23 全球购物
美国迪克体育用品商店:DICK’S Sporting Goods
2018/07/24 全球购物
德国圣伯纳德草药屋:Kräuterhaus Sanct Bernhard(有中文站)
2018/08/05 全球购物
2014年组织委员工作总结
2014/12/01 职场文书
劳动争议仲裁代理词
2015/05/25 职场文书
同意报考公务员证明
2015/06/17 职场文书
anaconda python3.8安装后降级
2021/06/11 Python
Java 写一个简单的图书管理系统
2022/04/26 Java/Android