关于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 相关文章推荐
FormValidate 表单验证功能代码更新并提供下载
Aug 23 Javascript
JavaScript Object的extend是一个常用的功能
Dec 02 Javascript
基于JQuery的浮动DIV显示提示信息并自动隐藏
Feb 11 Javascript
javascript计算当月剩余天数(天数计算器)示例代码
Jan 09 Javascript
node.js操作mongoDB数据库示例分享
Nov 26 Javascript
简单谈谈node.js 版本控制 nvm和 n
Oct 15 Javascript
AngularJS 使用 UI Router 实现表单向导
Jan 29 Javascript
详解JSONObject和JSONArray区别及基本用法
Oct 25 Javascript
angularjs实现时间轴效果的示例代码
Nov 29 Javascript
基于Vue实现微信小程序的图文编辑器
Jul 25 Javascript
vue 验证码界面实现点击后标灰并设置div按钮不可点击状态
Oct 28 Javascript
vue中 v-for循环的用法详解
Feb 19 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实现生成PDF文件的方法示例【基于FPDF类库】
2018/07/21 PHP
php面向对象程序设计入门教程
2019/06/22 PHP
ThinkPHP 5 AJAX跨域请求头设置实现过程解析
2020/10/28 PHP
分享精心挑选的23款美轮美奂的jQuery 图片特效插件
2012/08/14 Javascript
Extjs4 类的定义和扩展实例
2013/06/28 Javascript
Js控制滑轮左右滑动实例
2015/02/13 Javascript
JavaScript面向对象的实现方法小结
2015/04/14 Javascript
jQuery弹出层插件Lightbox_me使用指南
2015/04/21 Javascript
Node.js与Sails ~项目结构与Mvc实现及日志机制
2015/10/14 Javascript
JavaScript实现点击按钮直接打印
2016/01/06 Javascript
js实现对table的增加行和删除行的操作方法
2016/10/13 Javascript
js数组与字符串常用方法总结
2017/01/13 Javascript
通过jsonp获取json数据实现AJAX跨域请求
2017/01/22 Javascript
初探JavaScript 面向对象(推荐)
2017/09/03 Javascript
node内置调试方法总结
2018/02/22 Javascript
vue单页开发父子组件传值思路详解
2018/05/18 Javascript
React优化子组件render的使用
2019/05/12 Javascript
用Python制作在地图上模拟瘟疫扩散的Gif图
2015/03/31 Python
python实现用户登陆邮件通知的方法
2015/07/09 Python
python虚拟环境virtualenv的安装与使用
2017/09/21 Python
Python numpy 提取矩阵的某一行或某一列的实例
2018/04/03 Python
python os用法总结
2018/06/08 Python
python实现简易动态时钟
2018/11/19 Python
如何利用Python分析出微信朋友男女统计图
2019/01/25 Python
django一对多模型以及如何在前端实现详解
2019/07/24 Python
python写程序统计词频的方法
2019/07/29 Python
Joules美国官网:出色的英国风格
2017/10/30 全球购物
火锅店的活动方案
2014/08/15 职场文书
房屋租赁协议书(标准版)
2014/10/02 职场文书
小学生思想品德评语
2014/12/31 职场文书
药品销售内勤岗位职责
2015/04/13 职场文书
2015年高校图书馆工作总结
2015/04/30 职场文书
如何在CSS中绘制曲线图形及展示动画
2021/05/24 HTML / CSS
python tqdm用法及实例详解
2021/06/16 Python
微软Win11什么功能最惊艳? Windows11新功能特性汇总
2021/11/21 数码科技
CSS实现背景图片全屏铺满自适应的3种方式
2022/07/07 HTML / CSS