对JS中this的理解

开始

在JS中,this的指向是由函数调用时的位置来决定的。那函数执行时是怎样决定this的绑定对象的呢?首先我们先要分析this的调用栈,我们所关心的调用位置就是当前正在执行的函数的前一个调用,找到调用位置以后,再根据以下实际情况判断this的指向。

  1. 默认绑定
function foo() {
  console.log(this.a)
}
var a = 1
foo() // 1

这段代码里,this.a被解析为window.a,因为foo是直接调用而没有任何修饰的函数引用,所以只能使用默认绑定.
注意:当函数体内设置为严格模式时,foo无法绑定到window.

  1. 隐式绑定
    该情况要考虑是否由上下文对象,或者被对象包含
function foo(){
  console.log(this.a)
}
var obj = {
  a: 'obj',
  foo: foo
}
obj.foo() // obj

注意:对象属性引用链中只有最顶层或者说最后一层会影响调用位置

function foo() { 
  console.log( this.a ); 
}
var obj = {
  a: '2',
  obj1: obj1,
}
var obj1 = {
  a: 42,
  foo: foo
}
obj.obj1.foo() // 42

你可能感兴趣的:(对JS中this的理解)