this深入理解

重点

this 是在调用 时被绑定的,完全取决于函数的调用位置(也就是函数的调用方法)。 


 

判断this

根据优先级来判断函数在某个调用位置应用的是哪条规则。按照下面的顺序来进行判断:

  1. 函数是否在new中调用(new绑定)?如果是的话this绑定的是新创建的对象。

         var bar = new foo()
    
  2. 函数是否通过call、apply(显式绑定)或者硬绑定调用?如果是的话,this绑定的是 指定的对象。

         var bar = foo.call(obj2)
    
  3. 函数是否在某个上下文对象中调用(隐式绑定)?如果是的话,this 绑定的是那个上 下文对象。

         var bar = obj1.foo()
    
  4. 如果都不是的话,使用默认绑定。如果在严格模式下,就绑定到undefined,否则绑定到 全局对象。

         var bar = foo()
    
posted @ 2018-09-20 10:58  糊涂一点web  阅读(102)  评论(0)    收藏  举报