关于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 相关文章推荐
双击滚屏-常用推荐
Nov 29 Javascript
jQuery 图片切换插件(代码比较少)
May 07 Javascript
jQuery判断指定id的对象是否存在的方法
May 22 Javascript
JS实现的倒计时效果实例(2则实例)
Dec 23 Javascript
js判断复选框是否选中及选中个数的实现代码
May 30 Javascript
node.js中实现kindEditor图片上传功能的方法教程
Apr 26 Javascript
JS实现队列的先进先出功能示例
May 10 Javascript
AngularJs点击状态值改变背景色的实例
Dec 18 Javascript
前端防止用户重复提交js实现代码示例
Sep 07 Javascript
layui的select联动实现代码
Sep 28 Javascript
vue-openlayers实现地图坐标弹框效果
Sep 24 Javascript
浅谈JavaScript浅拷贝和深拷贝
Nov 07 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批量上传的实现代码
2013/06/09 PHP
PHP使用SOAP调用.net的WebService数据
2013/11/12 PHP
php无限分类使用concat如何实现
2015/11/05 PHP
PHP环境搭建(php+Apache+mysql)
2016/11/14 PHP
ThinkPHP类似AOP思想的参数验证的实现方法
2019/12/18 PHP
php7 list()、session及其他模块的修改实例分析
2020/05/25 PHP
Javascript操作select方法大全[新增、修改、删除、选中、清空、判断存在等]
2008/09/26 Javascript
浅谈tudou土豆网首页图片延迟加载的效果
2010/06/23 Javascript
原生javascript实现隔行换色
2015/01/04 Javascript
Angular2 环境配置详细介绍
2016/09/21 Javascript
基于jQuery和Bootstrap框架实现仿知乎前端动态列表效果
2016/11/09 Javascript
利用JS屏蔽页面中的Enter按键提交表单的方法
2016/11/25 Javascript
Chrome浏览器的alert弹窗禁止再次弹出后恢复的方法
2016/12/30 Javascript
Vue工程模板文件 webpack打包配置方法
2017/12/26 Javascript
node使用promise替代回调函数
2018/05/07 Javascript
利用原生的JavaScript实现简单拼图游戏
2018/11/18 Javascript
详解React 元素渲染
2020/07/07 Javascript
如何使用jQuery操作Cookies方法解析
2020/09/08 jQuery
JavaScript实现跟随鼠标移动的盒子
2021/01/28 Javascript
收集的几个Python小技巧分享
2014/11/22 Python
python实现定时同步本机与北京时间的方法
2015/03/24 Python
Python列表list操作符实例分析【标准类型操作符、切片、连接字符、列表解析、重复操作等】
2017/07/24 Python
Python实现扩展内置类型的方法分析
2017/10/16 Python
django 使用 request 获取浏览器发送的参数示例代码
2018/06/11 Python
欧洲领先的技术商店:eibmarkt.com
2019/05/10 全球购物
Club Monaco加拿大官网:设计师男女服装
2019/09/29 全球购物
秘书行业自我鉴定范文
2013/12/30 职场文书
早读迟到检讨书
2014/01/24 职场文书
优秀党员推荐材料
2014/12/18 职场文书
办公室年度工作总结2015
2015/05/21 职场文书
追悼词范文大全
2015/06/23 职场文书
农贸批发市场管理制度
2015/08/07 职场文书
mysql创建存储过程及函数详解
2021/12/04 MySQL
python turtle绘图
2022/05/04 Python
戴尔Win11系统no bootable devices found解决教程
2022/09/23 数码科技
Elasticsearch6.2服务器升配后的bug(避坑指南)
2022/09/23 Servers