访问javascript对象的this元素的正确方法是什么?

访问javascript对象的this元素的正确方法是什么?,javascript,Javascript,在下面javascript对象中的设置ClickEvents功能上,当我尝试使用addEventListener中的this元素时,它不起作用,我必须使用对象本身的选项卡 我不确定这是否是一个好的做法,我正在做的,但它的工作 我能做些什么来改进它 var tabUI = { leftTab: undefined, rightTab: undefined, setTabs: function(leftTabId, rightTabId) { this.le

在下面javascript对象中的设置ClickEvents功能上,当我尝试使用addEventListener中的this元素时,它不起作用,我必须使用对象本身的选项卡

我不确定这是否是一个好的做法,我正在做的,但它的工作

我能做些什么来改进它

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请参见和以获取说明。请参见第二个链接中的注释