我是ES6的新手,不能完全做到这一点:$(this)
在单击时返回undefined?
dom.videoLinks.click((e) => {
e.preventDefault();
console.log($(this));
var self = $(this),
url = self.attr(configuration.attribute);
eventHandlers.showVideo(url);
// Deactivate any active video thumbs
dom.videoLinks.filter('.video-selected').removeClass('video-selected');
// Activate selected video thumb
self.addClass('video-selected');
});
字符串
但是,如果我改变它,所以不是一个 * 箭头函数 * 这样,它的工作原理如预期?:
dom.videoLinks.click(function(e) {
e.preventDefault();
console.log(this);
console.log($(this));
var self = e.this,
url = self.attr(configuration.attribute);
eventHandlers.showVideo(url);
// Deactivate any active video thumbs
dom.videoLinks.filter('.video-selected').removeClass('video-selected');
// Activate selected video thumb
self.addClass('video-selected');
});
型
那么,如果我在回调函数中使用一个 * 箭头函数 *,我该怎么做呢?
5条答案
按热度按时间fiei3ece1#
使用 arrow function 作为回调函数,而不是使用
this
来获取处理程序所绑定的元素,您应该使用event.currentTarget
。箭头函数中
this
的值由箭头函数 * 定义 * 的位置决定,而不是 * 使用 * 的位置。因此,从现在开始,请记住
event.currentTarget
始终引用当前正在处理其EventListener的DOM
**元素。.currentTarget对.target
使用
event.currentTarget
而不是event.target
,因为 * 事件冒泡/捕获 *:event.currentTarget
-是事件监听器所连接的元素。event.target
-是触发事件的元素。From the documentation:
currentTarget
类型EventTarget
,readonly用于指示当前正在处理其EventListeners
的EventTarget
。这在 * 捕获 * 和 * 冒泡 * 期间特别有用。检查下面片段中的基本示例
eqoofvh92#
你不会的
改变
this
的值是使用箭头函数的主要要点。如果你不想这样做,那么箭头功能是错误的工具。
e0bqpujr3#
即使在箭头函数中,你也可以使用
$(event.target)
来代替$(this)
。箭头函数保留了它们定义的作用域this
。在你的例子中,它是undefined
。bkkx9g8r4#
箭头函数和这个选择器?
箭头函数从封闭上下文中保留
this
。字符串
那么,如果我在回调函数中使用箭头函数,我该怎么做呢?
你已经可以访问事件目标了,你可以使用类似
$(e.target)
的东西,但是要小心冒泡。所以我推荐使用普通函数作为回调函数。baubqpgj5#
与常规函数相比,箭头函数对
this
的处理也有所不同。总之,有了箭头函数,就没有了这个绑定。
在常规函数中,
this
关键字表示调用函数的对象,它可以是窗口、文档、按钮或其他任何对象。在箭头函数中,
this
关键字始终表示定义箭头函数的对象。要获取名为箭头函数的对象,必须使用
event.currentTarget
而不是this
。在本例中,将
event
定义为参数e
。