关于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-easyui关闭tab自动切换到前一个tab
Jul 29 Javascript
23个Javascript弹出窗口特效整理
Feb 25 Javascript
基于jquery的设置页面文本框 只能输入数字的实现代码
Apr 19 Javascript
jquery数据验证插件(自制,简单,练手)实例代码
Oct 24 Javascript
运用JQuery的toggle实现网页加载完成自动弹窗
Mar 18 Javascript
ExtJS4 动态生成的grid导出为excel示例
May 02 Javascript
浅析javascript中的事件代理
Nov 06 Javascript
AngularJS表达式讲解及示例代码
Aug 16 Javascript
js仿拉勾网首页穿墙广告效果
Mar 08 Javascript
jQuery实现键盘回车搜索功能
Jul 25 jQuery
javascript自定义右键菜单插件
Dec 16 Javascript
简单了解three.js 着色器材质
Aug 03 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
Windows下的PHP5.0安装配制详解
2006/09/05 PHP
php 购物车实例(申精)
2009/05/11 PHP
php错误级别的设置方法
2013/06/17 PHP
CI框架的安全性分析
2016/05/18 PHP
PHP支付宝当面付2.0代码
2018/12/21 PHP
PHP设计模式之抽象工厂模式实例分析
2019/03/25 PHP
JavaScript中清空数组的三种方法分享
2011/04/07 Javascript
关于锚点跳转及jQuery下相关操作与插件
2012/10/01 Javascript
nullJavascript中创建对象的五种方法实例
2013/05/07 Javascript
网页前端优化之滚动延时加载图片示例
2013/07/13 Javascript
JavaScript如何自定义trim方法
2015/07/28 Javascript
javascript基础语法学习笔记
2016/01/04 Javascript
详解Bootstrap各式各样的按钮(推荐)
2016/12/13 Javascript
微信小程序 在线支付功能的实现
2017/03/14 Javascript
解决vue-cli webpack打包开启Gzip 报错问题
2019/07/24 Javascript
Vue2.x和Vue3.x的双向绑定原理详解
2020/11/05 Javascript
微信小程序调用后台service教程详解
2020/11/06 Javascript
[12:29]《一刀刀一天》之DOTA全时刻19:蝙蝠骑士田伯光再度不举
2014/06/10 DOTA
python多线程用法实例详解
2015/01/15 Python
python根据日期返回星期几的方法
2015/07/06 Python
Python MySQL数据库连接池组件pymysqlpool详解
2017/07/07 Python
python itchat实现微信好友头像拼接图的示例代码
2017/08/14 Python
让Python更加充分的使用Sqlite3
2017/12/11 Python
django重新生成数据库中的某张表方法
2019/08/28 Python
python 读取更新中的log 或其它文本方式
2019/12/24 Python
Python爬虫实现模拟点击动态页面
2020/03/05 Python
如何通过Python3和ssl实现加密通信功能
2020/05/09 Python
python使用bs4爬取boss直聘静态页面
2020/10/10 Python
eBay法国购物网站:eBay.fr
2017/10/21 全球购物
大学学习计划书范文
2014/05/02 职场文书
2015关爱留守儿童工作总结
2014/12/12 职场文书
作息时间调整通知
2015/04/22 职场文书
社区节水倡议书
2015/04/29 职场文书
2016年党员承诺书范文
2016/03/24 职场文书
微信小程序APP的生命周期及页面的生命周期
2022/04/19 Javascript
使用opencv-python如何打开USB或者笔记本前置摄像头
2022/06/21 Python