为什么在 JavaScript 的匿名函数之外没有用于访问 "this" 对象的关键字?
Why is not a keyword for accessing "this" object outside anonymous function in JavaScript?
当使用匿名函数时,我看到的一个常见的方法通过
对象对 JavaScript 中函数的 this
引用是这样的:
var that = this;
collection.forEach(function(e) {
that.element = e;
});
当然,这可以与语言和打字无关(JavaScript 是我遇到最多的地方)。
所以,因为我很好奇,为什么 that
没有成为该语言或其他语言的标准?它似乎不是一个实现问题,因为它实际上是一个对象引用,仅此而已。
当然,我关注的不是命名为"that"或"self"或"John",而是其目的:通过匿名函数内部的引用访问对象。
因为你的变量名由你决定。例如,在我看来,that
是一个非常愚蠢的名称,用作 this
的别名,因为它的意思是 that。我通常坚持 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;
});
当使用匿名函数时,我看到的一个常见的方法通过
对象对 JavaScript 中函数的 this
引用是这样的:
var that = this;
collection.forEach(function(e) {
that.element = e;
});
当然,这可以与语言和打字无关(JavaScript 是我遇到最多的地方)。
所以,因为我很好奇,为什么 that
没有成为该语言或其他语言的标准?它似乎不是一个实现问题,因为它实际上是一个对象引用,仅此而已。
当然,我关注的不是命名为"that"或"self"或"John",而是其目的:通过匿名函数内部的引用访问对象。
因为你的变量名由你决定。例如,在我看来,that
是一个非常愚蠢的名称,用作 this
的别名,因为它的意思是 that。我通常坚持 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;
});