this指向问题

this指向其调用者

注意this声明位置与调用位置

// 声明位置
var me={
  name:'lizzy',
  hello: function(){
    console.log(`Hello, my name is ${this.name}`);
  }
}
var you = {
  name:'zzjwd',
  hello: function(){
    var targetFunc = me.hello;
    targetFunc();
  }
}
var name = 'global';
// 调用位置
you.hello();

targetFunc是用var定义的全局变量,所以它的调用者是window。

以下3种函数的this指向window

  • 立即执行函数
  • setTimeout中传入的函数
  • setInterval中传入的函数

箭头函数的this指向书写它时父作用域的this上

var a=1;
var obj={
  a:2,
  func2: ()=>{
    console.log(this.a)
  },
  func3: function(){
    console.log(this.a)
  }
}

//func1
var func1 = ()=>{
  console.log(this.a)
}
var func2 = obj.func2;
var func3 = obj.func3;

func1();
func2();
func3();
obj.func2();
obj.func3();
posted @ 2021-07-06 10:59  小白yang  阅读(35)  评论(0)    收藏  举报