ES6箭头函数里的this

一,了解前须知

1,箭头函数:出现的作用除了让函数的书写变得很简洁,可读性很好外;最大的优点是解决了this执行环境所造成的一些问题。比如:解决了匿名函数this指向的问题(匿名函数的执行环境具有全局性),包括setTimeout和setInterval中使用this所造成的问题。

2,我们常见的window属性和方法有alter,document,parseInt,setTimeout,setInterval,localtion等等,这些在默认的情况下是省略了window前缀的。(window.alter = alter)。

3,在“use strict”严格模式下,没有直接的挂载者(或称调用者)的函数中this是指向window,这是约定俗成的。在“use strict”严格模式下,没有直接的挂载者的话,this默认为undefined。以下都是在非严格模式下讨论。

二,普通函数中的this

普通函数,this的概念是:this是JavaScript的一个关键字,他是指函数执行过程中,自动生成的一个内部对象,是指当前的对象,只在当前函数内部使用。(this对象是在运行时基于函数的执行环境绑定的:在全局函数中,this指向的是window;当函数被作为某个对象的方法调用时,this就等于那个对象)。

一个最简单的例子:

这种情况下,我们希望在每一次循环后都能得到$("#content")的this,但是因为this是只在当前函数内部使用的,又因为js函数是可以多层嵌套的原因,使得我们无法得到最开始的this,这时我们可以把他先用一个变量存储起来,最终达到我们想要的目的。(一般我们会这样定义:var _this = this   var that=this)。个人习惯是用后者。

我们在来看一个函数的例子:

打印是结果是the window。原因是,匿名函数的执行环境是全局的,而且this只在函数内部起作用。此时的this.name在匿名函数中找不到,所以就从全局中找,找到后打印出来。

我们将上面的函数改装一下:

  我们在getNameFun内将this赋给that,此时的that指向的是挂载(调用)的对象,即为object,此时在匿名函数中调用that.name会在object上查找相应的数据,而不是在全局上查找,最终打印出myobject。

我们试着把函数的执行对象放在window下看看:

打印的结果是window的对象,如下图:

接下来我们把函数的执行对象放在一个自定义变量上看看:

两者打印的都是obj的对象,如下图:此时的setTimeout里面的that指向的是obj,因为在say中this的绑定对象是obj,this又赋给了that。

下面为了更深一步的理解this这个概念,我们来看一下下面的代码,并判断其运行结果:

这个函数中,obj.db1()执行时,this.val是指obj里面的val=2,this.val*=2 =4;val在db1函数中并没有定义,所以默认情况下会在全局上找,此时val*=2=2。所以打印2 4。接着,定义一个func=obj.db1,我们把func打印出来看看是这样的:

所以可以看出func的执行对象是window,我们可以此时全局的val已经等于4了,在经过this.val*=2,val*=2的运算,打印的结果就是8  8。

上面的代码打印的就是:

如果你对上面的结果很了解了,那就证明你已经很了解this,那接下来我们来看看es6箭头函数的this

三,es6箭头函数的this

箭头函数的this定义:箭头函数的this是在定义函数时绑定的,不是在执行过程中绑定的。简单的说,函数在定义时,this就继承了定义函数的对象。

所以,这会很好的解决匿名函数和setTimeout和setInterval的this指向问题。我们不用再去给其用that变量存储this。

看下面代码:

打印的结果:

这就是箭头函数中的this!!!

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 一句话概括,es6箭头函数里的this指的是定义这个函数时外层代码的this,这句话可以从两个方面理解: es6箭...
    Sue1024阅读 8,266评论 0 0
  • Scala与Java的关系 Scala与Java的关系是非常紧密的!! 因为Scala是基于Java虚拟机,也就是...
    灯火gg阅读 8,827评论 1 24
  • 普通函数中的this: this总是代表它的直接调用者(js的this是执行上下文), 例如 obj.func ,...
    紫陌兰溪阅读 5,861评论 1 0
  • 召唤世界上所有的女人们来拥有神圣女性的力量与优雅。通过你们的存在的深度与光明,去鼓舞、引领他人。彰显你们的...
    SiriSundriKaur阅读 3,440评论 0 0
  • 30天,从7月9号开始到8月九号回国,细细想来,竟像场梦,怕也只有梦这个字眼可以概括在兰卡这短短的一段时光了。 从...
    abby怡阅读 2,773评论 0 4