为什么这个this指向obj对象呢?

第一个this是1990 为什么第二个是obj了呢?

var obj = {
    birth: 1990,
    getAge: function () {
        var b = this.birth; // 1990
        var fn = () => new Date().getFullYear() - this.birth; // this指向obj对象
        return fn();
    }
};
obj.getAge(); // 25
阅读 3.7k
5 个回答

说的俗一点,应该就能解释清楚:

箭头函数在哪个function中定义的,那个function就是它爸爸,它的this就代指它爸的this。
若箭头函数在全局中定义,那么this代指window 或 {}(服务端)

本例中,箭头函数在getAge这个function中定义的,那么getAge就是它爸,箭头函数中提到的this就是getAge的this。 obj.getAge()执行后, getAge的this指向obj, 所以箭头函数中的this也指向obj

题外话:
看了你和其他人的互动,你是不是对普通函数的this理解还不清楚?普通函数的this,比如本例中的var b用到this,这种普通函数this运行时才能确定指向哪个对象:绑定在谁身上执行,这个this就指向谁。 比如:

obj.getAge(); // 那么getAge绑定在obj上执行了,var b中的this就是指obj, 结果为28

var objX = {birth:2015};
obj.getAge.call(objX); //此时getAge绑定在objX上执行,var b中的this指向objX, 结果为3
  • 箭头函数没有它自己的 this 值。
  • 箭头函数内的 this 值继承自外围作用域。
  • 箭头函数中调用 this 时,是简单的沿着作用域链向上寻找,找到最近的一个 this 拿来使用。

箭头函数的this绑定的是箭头函数所在执行上下文的this
也就是说,代码中,this.birth === obj.birth
new Date().getFullYear() - this.birth也就是2018 - 1990

后面那个跟第一句的this上下文其实是一样的。

箭头函数了解一下,这里讲得更详细廖雪峰-箭头函数

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