箭头作为方法的功能:这个的价值

时间:2018-01-22 00:59:06

标签: javascript arrow-functions

MDN提供了以下两个箭头函数示例

示例1

var adder = {
  base: 1,

  addThruCall: function(a) {
    var f = v => v + this.base;
    var b = {
      base: 2
    };

    return f.call(b, a);
  }
};

console.log(adder.addThruCall(1)); // 2

示例2

'use strict';
var obj = {
  i: 10,
  b: () => console.log(this.i, this),
  c: function() {
    console.log(this.i, this);
  }
}
obj.b(); // prints undefined, Window {...} (or the global object)
obj.c(); // prints 10, Object {...}

问题

    示例1中的
  • this.base指向adder.base
  • 示例2中属性this.i
  • b解析为undefined

如果箭头功能没有this值,那么this.base也不应该解析为undefined吗?

2 个答案:

答案 0 :(得分:2)

在示例1中,箭头函数f是在addThruCall内的函数adder内创建的。这意味着this内的f将指向addThruCall的this,即adder

在示例2中,箭头函数b不在任何正常函数内,因此其this不指向任何位置。

不是箭头函数没有this值,箭头函数不会改变它们创建的this值。

答案 1 :(得分:2)

箭头功能有一个"这个",它是什么"这个"当你定义它们时,它在当前范围内。

在第二个例子中,在箭头函数b()中,因为你没有特定的父范围定义"这个","这个"指向" Window" (在浏览器上下文中)

同样在第二个示例中,在命名函数c()中,function()...引入了一个范围,默认情况下为undefined

所以你看到的是完全可以预期的。但是,正如你所看到的,"这个"很难掌握,所以好的代码风格建议尽可能避免它。在这种情况下,您可能希望使用闭包。

在另一个问题中有趣地读到了这个:How does the "this" keyword work?