深入理解this指向


this指向是个老生常谈的话题

最近读了JS忍者秘籍及博客介绍,就先写下

假如有人问你this指向那里,你可以说:我也不知道.


首先要想知道this的指向,首先得知道this是什么.

当一个函数被调用时,会创建一个活动记录,有时也叫执行上下文,这个记录会包含函数在哪里被调用(调用栈)、函数的调用方式,传入的参数信息,this就是这个记录属性

—–你不知道的JS上卷


this是函数在调用时,除了函数的显参,还传入了叫做this的隐参(还有另一个叫做arguments)
this参数引用了该函数调用进行隐式关联的一个对象叫做函数的上下文function context而函数上下文是一个概念,在JS语言中,this依赖于函数的调用方式
因此将this 称为调用上下文更好理解(invocation context)

—-JavaScript忍者秘籍


this绑定和函数声明的位置没有任何关系只取决于函数的调用方式.

this既不指向函数自身也不指向函数的词法作用域.他是在函数被调用时发生的绑定,指向完全取决于函数在哪里被调用.

-----你不知道的JS上卷


作为函数进行调用

JS中允许函数作为函数进行调用,区别于其他的调用机制:方法,构造器,apply/call,如果函数没有通过,方法构造器,或者apply()/call()进行调用,我们可以认为它是”作为函数”进行调用,通常发生在函数使用()操作符进行调用的时候.

此时(普通函数,定时器函数,立即执行函数)this指向全局上下文–window对象

—-JavaScript忍者秘籍


作为方法进行调用

将函数作为对象的一个方法method进行调用时,那么该对象变成了函数上下文.通俗解释的说,作为对象的一个方法进行调用时候,this指向这个拥有这个方法的对象(方法所属的对象).

—-JavaScript忍者秘籍


作为构造器constructor进行调用

构造器调用时就会发生:

  • 创建一个新的对象

  • 传递给构造器的对象是this参数,从而称为构造器的函数上下文

  • 如果没有显示的返回值,新创建的对象则作为构造器的返回值进行返回

    —-JavaScript忍者秘籍


构造器的目的就是要去创造一个新对象并对其进行设置,然后将构造器的返回值进行返回.任何干扰这种意图的函数都不时候作为构造器.
即当函数作为构造器进行调用时候,
this指向是对象,原型对象里的方法也指向实例对象


Author: xt_xiong
转载要求: 如有转载请注明出处 :根据 CC BY 4.0 告知来自 xt_xiong !
评论
  标题