关于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脚本性能的优化方法
Feb 02 Javascript
js类中的公有变量和私有变量
Jul 24 Javascript
JavaScript中的document.referrer在各种浏览器测试结果
Jul 18 Javascript
node.js中的fs.exists方法使用说明
Dec 17 Javascript
jQuery模拟黑客帝国矩阵效果实例
Jun 28 Javascript
详解JavaScript的流程控制语句
Nov 30 Javascript
jQuery实现简单倒计时功能的方法
Jul 04 Javascript
AngularJS 异步解决实现方法
Jun 12 Javascript
客户端(vue框架)与服务器(koa框架)通信及服务器跨域配置详解
Aug 26 Javascript
Vue.set()实现数据动态响应的方法
Feb 07 Javascript
基于vue-cli3+typescript的tsx开发模板搭建过程分享
Feb 28 Javascript
解决vant框架做H5时踩过的坑(下拉刷新、上拉加载等)
Nov 11 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
WordPress中用于检索模版的相关PHP函数使用解析
2015/12/15 PHP
php短信接口代码
2016/05/13 PHP
Json_decode 解析json字符串为NULL的解决方法(必看)
2017/02/17 PHP
PHP实现的简单sha1加密功能示例
2017/08/27 PHP
JavaScript 继承的实现
2009/07/09 Javascript
js 点击按钮弹出另一页,选择值后,返回到当前页
2010/05/26 Javascript
jquery select 设置默认选中的示例代码
2014/02/07 Javascript
jQuery DOM删除节点操作指南
2015/03/03 Javascript
分享十五款 jQuery 社交网络分享插件
2015/05/16 Javascript
JavaScript学习笔记(三):JavaScript也有入口Main函数
2015/09/12 Javascript
WEB前端开发框架Bootstrap3 VS Foundation5
2016/05/16 Javascript
Js调用Java方法并互相传参的简单实例
2016/08/11 Javascript
Node.js中使用jQuery的做法
2016/08/17 Javascript
js正则表达式最长匹配(贪婪匹配)和最短匹配(懒惰匹配)用法分析
2016/12/27 Javascript
AngularJS框架中的双向数据绑定机制详解【减少需要重复的开发代码量】
2017/01/19 Javascript
js实现无缝滚动图(可控制当前滚动的方向)
2017/02/22 Javascript
JS实现加载和读取XML文件的方法详解
2017/04/24 Javascript
详解前端路由实现与react-router使用姿势
2017/08/07 Javascript
收集前端面试题之url、href、src
2018/03/22 Javascript
解决vue 绑定对象内点击事件失效问题
2018/09/05 Javascript
node.js监听文件变化的实现方法
2019/04/17 Javascript
Vue中this.$nextTick的作用及用法
2020/02/04 Javascript
python通过apply使用元祖和列表调用函数实例
2015/05/26 Python
python读取xlsx的方法
2018/12/25 Python
python进程和线程用法知识点总结
2019/05/28 Python
10款最好的Python开发编辑器
2019/07/03 Python
Python使用re模块验证危险字符
2020/05/21 Python
Selenium环境变量配置(火狐浏览器)及验证实现
2020/12/07 Python
html5时钟实现代码
2010/10/22 HTML / CSS
企业消防安全制度
2014/02/02 职场文书
《动手做做看》教学反思
2014/04/09 职场文书
开学典礼策划方案
2014/05/28 职场文书
幸福家庭事迹材料
2014/12/20 职场文书
搞笑婚礼主持词开场白
2015/11/24 职场文书
竞聘开场白方式有哪些?
2019/08/28 职场文书
Python 可迭代对象 iterable的具体使用
2021/08/07 Python