为什么不是在 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
的别名,因为它的意思是,你知道,那个。我通常坚持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;
});
相关文章:
- 如何使用(this)访问Angular 2 http rxjs catch函数中的对象属性
- 为什么我不能在 ajax 成功中访问 $(this)
- 在接受功能上访问燃料UX标语牌中的“this”
- $.each 中的“this”,当需要使用“this”访问对象的函数时
- 在jQuery中,我如何从$.ajax回调函数访问$(this)
- TypeScript:在对象文字字段中的访问器中访问外部“this”
- JavaScript 访问函数构造函数中的“this”
- React Native can'无法在render()方法之外访问this.ops
- 通过函数传递“this”时,我是否可以无法访问“this”的属性
- 如何使用“self = this”访问类属性
- 使用“this”访问对象的值
- arguments属性可以由this访问.some_function.arguments?实际上我无法解释
- 使用let初始化的函数在被this访问时不被替换
- 隐藏匿名JavaScript函数中的变量,但使用“this”访问它们
- 如何使用$(this)访问调用Javascript函数的按钮的id
- 在Javascript中无法通过this访问const变量
- 如何在jQuery中使用$(this)访问子元素?
- 无法使用“this”访问对象.“this”指向“窗口”对象
- 使用jQuery的$(this)访问内部文本
- 使用this访问对象内的对象名称