为什么不是在 JavaScript 中匿名函数之外访问“this”对象的关键字

Why is not a keyword for accessing "this" object outside anonymous function in JavaScript?

本文关键字:this 访问 对象 关键字 JavaScript 函数 为什么不      更新时间:2023-09-26

使用匿名函数时,我见过的一种常见方法该对象对 JavaScript 中函数的this引用是这样的:

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

当然,这可能是语言不可知的,也是与类型无关的(JavaScript正是我遇到最多的地方(。

那么,因为我对此感到好奇,为什么that没有成为该语言或其他语言的标准?这似乎不是一个实现问题,因为它实际上是一个对象引用,而不是其他任何东西。

当然,我关注的不是它是否会被命名为"that"或"self"或"John",而是它的目的:通过匿名函数中的引用访问对象。

因为您的变量名称由您决定。例如,以我的拙见,that是一个非常愚蠢的名字,用作this的别名,因为它的意思是,你知道,那个。我通常坚持thiswhatsit或类似。但这就是。有些人真的很喜欢that,它肯定会变成惯用语。有些人喜欢self.或者me.或_this.

但是,如果我们谈论的是正确处理此问题的方法,那么在语言中,ES5 和 ES2015 添加了它们:

  • ES5 添加了 Function#bind ,允许您为函数设置特定的this。(ES5 的forEach和 [大多数] 其他阵列改进也有一个thisArg参数,你可以使用。

  • ES2015(又名 ES6(添加了箭头函数,这些函数从创建它们的上下文(特别是从封闭词法环境(继承this

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;
});