继承这个功能

时间:2018-02-07 13:41:38

标签: javascript jquery this

我想通过使用在点击上运行的功能来更改它,以便更清楚地写出来。这是有效的代码:

    menuHamburger.click(function () {

        if($(this).hasClass("closed")){
            $(this).removeClass("closed");
        };
        subMenu.removeClass("show");

        if (mainSidebar.toggleClass('active')) {
            return true;
        }
    });

我想用这种方式写它:

    menuHamburger.click(function () {

        closedHamburderOnClick();

        if($(this).hasClass("closed")){
            $(this).removeClass("closed");
        };
        subMenu.removeClass("show");

        if (mainSidebar.toggleClass('active')) {
            return true;
        }
    });


    function closedHamburderOnClick(){
        if($(this).hasClass("closed")){
            $(this).removeClass("closed");
        };
    }

但它不起作用。如何解决?

1 个答案:

答案 0 :(得分:0)

在这种特殊情况下,只需将$(this)传递给您的函数并声明要使用的参数:

menuHamburger.click(function () {

    closedHamburderOnClick($(this));

    // (removed lines here I'm fairly sure you meant to remove in the question)

    subMenu.removeClass("show");

    if (mainSidebar.toggleClass('active')) {
        return true;
    }
});


function closedHamburderOnClick(elements){
    if(elements.hasClass("closed")){         // You can get rid of this entirely
        elements.removeClass("closed");
    } // No ; after the block attached to control flow statements
}

如果您有某种原因需要致电closedHamburderOnClick,以便其中的this与您拨打电话时的内容相同,那么您需要使用Function#call

closedHamburderOnClick.call(this);

然后在其中使用this

function closedHamburderOnClick(){
    if($(this).hasClass("closed")){         // You can get rid of this entirely
        $(this).removeClass("closed");
    } // No ; after the block attached to control flow statements
}

还有Function#apply也以同样的方式处理this,但callapply处理不同的参数。

但在这种情况下,不需要callapply