为什么不是用于访问"这个"的关键字? JavaScript中的匿名函数外的对象?

时间:2015-10-23 05:18:42

标签: javascript this keyword anonymous-function

使用匿名函数时,我看到了一种常见的方法 对象的this对JavaScript函数的引用是:

var that = this;

collection.forEach(function(e) {
  that.element = e;
});

当然,这可能与语言无关,并且键入不可知(JavaScript是我最常见到的地方)。

所以,因为我很好奇,为什么没有that成为语言或其他语言的标准?它似乎不是一个实现问题,因为它实际上是一个对象引用,而不是更多。

当然,如果它被命名为"那"或者"自我"或" John",但其目的是:通过匿名函数内的引用访问对象。

1 个答案:

答案 0 :(得分:4)

因为您的变量名称取决于您。例如,在我的简略视图中,that是一个非常愚蠢的名称,可用作this的别名,因为它意味着, 。我一般坚持thiswhatsit或类似。但那是。有些人真的很喜欢that,而且肯定会成为惯用语。有些人喜欢self。或me。或_this

但如果我们正在讨论如何正确处理 这个问题,那么在语言中,ES5和ES2015会添加它们:

  • ES5添加了Function#bind,可让您为某个功能设置特定的this。 (ES5的forEach和[大部分]其他数组改进也有一个thisArg参数可以使用。)

  • ES2015(又名ES6)添加了箭头函数,它从创建它们的上下文中继承this(具体来说,来自enclosing lexical environment)。

ES5示例:

// Using thisArg:
collection.forEach(function(e) {
  this.element = e;
}, this);

// Using `bind`:
collection.someOtherMethod(function(e) {
    this.whatsit = foo;
}.bind(this));

ES6示例:

collection.forEach(e => {
    this.whatsit = foo;
});