使用匿名函数时,我看到了一种常见的方法
对象的this
对JavaScript函数的引用是:
var that = this;
collection.forEach(function(e) {
that.element = e;
});
当然,这可能与语言无关,并且键入不可知(JavaScript是我最常见到的地方)。
所以,因为我很好奇,为什么没有that
成为语言或其他语言的标准?它似乎不是一个实现问题,因为它实际上是一个对象引用,而不是更多。
当然,如果它被命名为"那"或者"自我"或" John",但其目的是:通过匿名函数内的引用访问对象。
答案 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;
});