关于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 相关文章推荐
总结AJAX相关JS代码片段和浏览器模型
Aug 15 Javascript
js 事件处理函数间的Event物件是否全等
Apr 08 Javascript
JavaScript高级程序设计 阅读笔记(十二) js内置对象Math
Aug 14 Javascript
javascript之typeof、instanceof操作符使用探讨
May 19 Javascript
Node.js的MongoDB驱动Mongoose基本使用教程
Mar 01 Javascript
jQuery根据表单name获取值的方法
May 24 Javascript
JavaScript之WebSocket技术详解
Nov 18 Javascript
mint-ui的search组件在键盘显示搜索按钮的实现方法
Oct 27 Javascript
JavaScript中利用Array filter() 方法压缩稀疏数组
Feb 24 Javascript
微信小程序日历组件使用方法详解
Dec 29 Javascript
微信小程序地图(map)组件点击(tap)获取经纬度的方法
Jan 10 Javascript
微信小程序上传图片到php服务器的方法
May 23 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文档功能
2006/10/09 PHP
PHP清除数组中所有字符串两端空格的方法
2014/10/20 PHP
php获取今日开始时间和结束时间的方法
2017/02/27 PHP
tp5(thinkPHP5)框架数据库Db增删改查常见操作总结
2019/01/10 PHP
扩展String功能方法
2006/09/22 Javascript
浏览器脚本兼容 文本框中,回车键触发事件的兼容
2010/06/21 Javascript
jquery下实现overlay遮罩层代码
2010/08/25 Javascript
appendChild() 或 insertBefore()使用与区别介绍
2013/10/11 Javascript
jsonp原理及使用
2013/10/28 Javascript
超简单JS二级、多级联动的简单实例
2014/02/18 Javascript
JS简单模拟触发按钮点击功能的方法
2015/11/30 Javascript
详解vuelidate 对于vueJs2.0的验证解决方案
2017/03/09 Javascript
jquery拼接ajax 的json和字符串拼接的方法
2017/03/11 Javascript
Vue.js基础学习之class与样式绑定
2017/03/20 Javascript
关于vue.extend和vue.component的区别浅析
2017/08/16 Javascript
基于 flexible 的 Vue 组件:Toast -- 显示框效果
2017/12/26 Javascript
vue2.0父子组件间传递数据的方法
2018/08/16 Javascript
vue设置动态请求地址的例子
2019/11/01 Javascript
Python和Perl绘制中国北京跑步地图的方法
2016/03/03 Python
python脚本监控docker容器
2016/04/27 Python
Python三级目录展示的实现方法
2016/09/28 Python
深入理解Python中的 __new__ 和 __init__及区别介绍
2018/09/17 Python
python使用opencv在Windows下调用摄像头实现解析
2019/11/26 Python
jupyter修改文件名方式(TensorFlow)
2020/04/21 Python
django queryset相加和筛选教程
2020/05/18 Python
从python读取sql的实例方法
2020/07/21 Python
Python实现快速大文件比较代码解析
2020/09/04 Python
谈谈python垃圾回收机制
2020/09/27 Python
HTML5实现预览本地图片
2016/02/17 HTML / CSS
英国异国风情旅游网站:Travel Talk Tours(团体旅游、探险旅游、帆船假期)
2018/07/26 全球购物
本科生职业生涯规划书范文
2014/01/21 职场文书
父亲八十大寿答谢词
2014/01/23 职场文书
植树节活动总结
2014/04/30 职场文书
2015年评职称工作总结范文
2015/04/20 职场文书
大学推普周活动总结
2015/05/07 职场文书
机关单位2016年法制宣传日活动总结
2016/04/01 职场文书