我正在使用非常有用的局部脂肪箭头保存this
回调中的上下文。但是,有时我需要访问该值this
如果我没有使用粗箭头的话就会有。
一个例子是事件回调,其中this
具有事件发生的元素的值(我知道在这个特定的示例中您可以使用event.currentTarget
,但为了举例,我们假设你不能):
function callback() {
// How to access the button that was clicked?
}
$('.button').click(() => { callback() });
Note:我遇到过这个问题它处理这个完全相同的问题,但是在 CoffeeScript 中。
您可以编写一个装饰器函数,将粗箭头函数包装在另一个函数中,该函数允许访问通常的函数this
并将该值作为附加参数传递给 fat-arrow 函数:
function thisAsThat (callback) {
return function () {
return callback.apply(null, [this].concat(arguments));
}
}
所以当你打电话时thisAsThat
对于胖箭头函数,这基本上会返回一个不同的回调函数,该函数在调用时会使用所有参数调用胖箭头函数,但会添加this
作为前面的一个论证。由于您无法绑定粗箭头函数,因此您可以调用bind
and apply
不用担心失去价值。
然后你可以像这样使用它:
element.addEventListener('click', thisAsThat((that, evt) => console.log(this, that, evt)));
这将记录this
当前范围(根据粗箭头规则),this
回调函数为that
(指向事件处理程序的元素),以及事件本身(但基本上,所有参数仍然被传递)。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)