this 指向4 箭头函数中的 this 指向

箭头函数的 this 指向

从 ES6入门 可以了解到

函数体内的this对象,就是定义时所在的对象,而不是使用时所在的对象

那这句话如何理解

//如果不特意绑定 this name这个this 就会指向这个方法对应的域里面的this
let o = {
    
    
	returnDoSth() {
    
    
        console.log(this)//o 这个对象
         return () => {
    
    
             console.log(this)//o 这个对象
         }
     }
 }
 let dosth = o.returnDoSth()
 dosth()// o 这个对象
//绑定this后
let o = {
    
    
	returnDoSth() {
    
    
        console.log(this)// window
         return () => {
    
    
             console.log(this)// window
         }
     }
 }
 let dosth = o.returnDoSth.call(window)
 dosth()

//第二个例子
function foo() {
    
    
	console.log(this)
}
foo.call({
    
     id: 42 });//打印结果:   {id: 42}
foo()//打印结果: window

总结: 在箭头函数当中,若没有特意改变(call apply bind等) this 的指向,则this 指向定义时所在域的 this

//阮一峰 ES6 入门例子
function foo() {
    
    
  return () => {
    
    
    return () => {
    
    
      return () => {
    
    
        console.log('id:', this.id);
      };
    };
  };
}

var f = foo.call({
    
    id: 1});
//这个操作之后 foo()里面的this 就指向了{id:1},
//而所有箭头函数都在这里面定义,
//所以每个箭头函数下的 this 都是指向{id:1}了

var t1 = f.call({
    
    id: 2})()(); 
var t2 = f().call({
    
    id: 3})(); 
var t3 = f()().call({
    
    id: 4}); 

箭头函数固定不可变,在定义之后就算使用call apply bind 来修改 this 也是不可以的(箭头函数的this总是指向定义时候的this)

由于箭头函数的 this 不可变性,所以不适用于定义对象内部的方法,并且里面包含this

需要动态绑定 this 的时候也不推荐使用,比如事件绑定


end
个人浅见,如有错误,欢迎指正

猜你喜欢

转载自blog.csdn.net/Chennfengg222/article/details/104693941
今日推荐