访问javascript对象的this元素的正确方法是什么?
在下面javascript对象中的设置ClickEvents功能上,当我尝试使用addEventListener中的this元素时,它不起作用,我必须使用对象本身的选项卡 我不确定这是否是一个好的做法,我正在做的,但它的工作 我能做些什么来改进它访问javascript对象的this元素的正确方法是什么?,javascript,Javascript,在下面javascript对象中的设置ClickEvents功能上,当我尝试使用addEventListener中的this元素时,它不起作用,我必须使用对象本身的选项卡 我不确定这是否是一个好的做法,我正在做的,但它的工作 我能做些什么来改进它 var tabUI = { leftTab: undefined, rightTab: undefined, setTabs: function(leftTabId, rightTabId) { this.le
var tabUI = {
leftTab: undefined,
rightTab: undefined,
setTabs: function(leftTabId, rightTabId) {
this.leftTab = document.getElementById(leftTabId);
this.rightTab = document.getElementById(rightTabId);
},
setClickEvents: function() {
this.leftTab.addEventListener('click', function() {
// This works
tabUI.leftTab.classList.add('tab_selected');
tabUI.rightTab.classList.remove('tab_selected');
// This doesn't work
this.leftTab.classList.add('tab_selected');
this.rightTab.classList.remove('tab_selected');
});
this.rightTab.addEventListener('click', function() {
tabUI.leftTab.classList.remove('tab_selected');
tabUI.rightTab.classList.add('tab_selected');
});
},
}
事件处理程序中是发生事件的元素
您可以使用以下两种方法之一解决问题。我建议您使用第二种方法,这样您就可以访问发生事件的元素
bind()
方法创建一个新函数,在调用该函数时,将其this关键字设置为提供的值,并在调用新函数时提供的任何参数之前提供给定的参数序列
this.leftTab.addEventListener('click',function(){
//这很有效
tabUI.leftTab.classList.add('tab_selected');
tabUI.rightab.classList.remove('tab_selected');
//这也适用于这里
this.leftTab.classList.add('tab_selected');
this.rightab.classList.remove('tab_selected');
}.约束(这个);
//^^^^^
事件处理程序中的元素是发生事件的元素
您可以使用以下两种方法之一解决问题。我建议您使用第二种方法,这样您就可以访问发生事件的元素
bind()
方法创建一个新函数,在调用该函数时,将其this关键字设置为提供的值,并在调用新函数时提供的任何参数之前提供给定的参数序列
this.leftTab.addEventListener('click',function(){
//这很有效
tabUI.leftTab.classList.add('tab_selected');
tabUI.rightab.classList.remove('tab_selected');
//这也适用于这里
this.leftTab.classList.add('tab_selected');
this.rightab.classList.remove('tab_selected');
}.约束(这个);
//^^^^^
事件处理程序中的元素是发生事件的元素
您可以使用以下两种方法之一解决问题。我建议您使用第二种方法,这样您就可以访问发生事件的元素
bind()
方法创建一个新函数,在调用该函数时,将其this关键字设置为提供的值,并在调用新函数时提供的任何参数之前提供给定的参数序列
this.leftTab.addEventListener('click',function(){
//这很有效
tabUI.leftTab.classList.add('tab_selected');
tabUI.rightab.classList.remove('tab_selected');
//这也适用于这里
this.leftTab.classList.add('tab_selected');
this.rightab.classList.remove('tab_selected');
}.约束(这个);
//^^^^^
事件处理程序中的元素是发生事件的元素
您可以使用以下两种方法之一解决问题。我建议您使用第二种方法,这样您就可以访问发生事件的元素
bind()
方法创建一个新函数,在调用该函数时,将其this关键字设置为提供的值,并在调用新函数时提供的任何参数之前提供给定的参数序列
this.leftTab.addEventListener('click',function(){
//这很有效
tabUI.leftTab.classList.add('tab_selected');
tabUI.rightab.classList.remove('tab_selected');
//这也适用于这里
this.leftTab.classList.add('tab_selected');
this.rightab.classList.remove('tab_selected');
}.约束(这个);
//^^^^^^^^
您似乎已经注意到,此
对象不是选项卡。它是运行事件的元素:事件处理程序将其上下文设置为运行事件的元素
请参见您似乎已经注意到,这个对象不是tabUI
。它是运行事件的元素:事件处理程序将其上下文设置为运行事件的元素
请参见您似乎已经注意到,这个对象不是tabUI
。它是运行事件的元素:事件处理程序将其上下文设置为运行事件的元素
请参见您似乎已经注意到,这个对象不是tabUI
。它是运行事件的元素:事件处理程序将其上下文设置为运行事件的元素
见谢谢!我使用了第二个例子,它是有效的。但是第一个看起来更优雅,你能给我一个更好的例子来说明为什么更好吗?@user3561335请参见和以获取说明。请参见第二个链接中的评论谢谢!我使用了第二个例子,它是有效的。但是第一个看起来更优雅,你能给我一个更好的例子来说明为什么更好吗?@user3561335请参见和以获取说明。请参见第二个链接中的评论谢谢!我使用了第二个例子,它是有效的。但是第一个看起来更优雅,你能给我一个更好的例子来说明为什么更好吗?@user3561335请参见和以获取说明。请参见第二个链接中的评论谢谢!我使用了第二个例子,它是有效的。但是第一个看起来更优雅,你能给我一个更好的例子来说明为什么更好吗?@user3561335请参见和以获取说明。请参见第二个链接中的注释