ES6处于obj中的箭头函数的this指向

不是说箭头函数实际上没有this,它的this实际上是箭头函数定义生效时所在的对象吗,那么怎么解释这个:

    var xx = "bb"
    var obj={
      xx:"aa",
      foo:()=>{console.log(this.xx);}
    };
    obj.foo();  // 输出bb

这个箭头函数定义时不是在obj中吗?那么为什么this指向了obj的外边

阅读 4k
2 个回答

正因为你使用了 箭头函数, 在构造obj的时候 绑定的this 为window;

var xx = "bb"
 var obj={
    xx:"aa",
    foo:function(){console.log(this.xx);}
 };
 obj.foo(); // aa

这个箭头函数的作用域和其他函数有一些不同,如果不是严格模式,this关键字就是指向window,严格模式就是undefined,在构造函数里的this指向的是当前对象实例,如果this在一个对象的函数内则this指向的是这个对象,this有可能指向的是一个dom元素,例如当我们添加事件监听函数时,可能这个this的指向不是很直接,其实this(不止是this变量)变量的指向是根据一个规则来判断的:作用域流。

题主的代码使用babel转义之后是这样的:

var _this = this;

var a = 'bb';
var obj = {
    a: 'aa',
    foo: function bar() {
        console.log(_this.a);
    }
};

所以箭头函数中的this指向的是最外层的this

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进