Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/jquery/73.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript CollapseSidebar不是一个函数_Javascript_Jquery - Fatal编程技术网

Javascript CollapseSidebar不是一个函数

Javascript CollapseSidebar不是一个函数,javascript,jquery,Javascript,Jquery,我正在为一个项目编写一个脚本,它有一个功能,可以在单击hamdurger图标时折叠或打开侧边栏,但当我单击它时,会出现错误 TypeError:this.CollapseSidebar不是函数 以下是我的代码: (function($) { 'use strict'; var Prtm = { Constants: { LEFTMARGIN:'315px', COLLAPSELEFTMARGIN: '63px',

我正在为一个项目编写一个脚本,它有一个功能,可以在单击hamdurger图标时折叠或打开侧边栏,但当我单击它时,会出现错误

TypeError:this.CollapseSidebar不是函数

以下是我的代码:

(function($) {
    'use strict';
    var Prtm = {
        Constants: {
            LEFTMARGIN:'315px',
            COLLAPSELEFTMARGIN: '63px',
        },
        PrtmEle:{
            BODY: $('body'),
            SIDEBAR: $('.prtm-sidebar'),
            SIDENAV: $('.sidebar-nav'),
            MAIN: $('.prtm-main'),
            HEADER: $('.prtm-header'),
            CONTENTWRAP: $('.prtm-content-wrapper'),
            CONTENT: $('.prtm-content'),
            PRTMBLOCK: $('.prtm-block'),
            FOOTER: $('.prtm-footer'),
            HAMBURGER: $('.prtm-bars'),
        },
        Init:function(){
            this.BindEvents();
        },
        BindEvents:function(){
            this.PrtmEle.BODY.on('click',this.PrtmEle.HAMBURGER,function(){
                this.CollapseSidebar();
            });
        },
        CollapseSidebar: function(){
            this.PrtmEle.HAMBURGER.toggleClass("prtm-sidebar-closed is-active");
            this.PrtmEle.BODY.toggleClass("prtm-sidebar-closed is-active");
            this.PrtmEle.SIDEBAR.toggleClass('collapse');
        },
    };
    Prtm.Init();
})(jQuery);
当我将
this.CollapseSidebar
更改为
Prtm.CollapseSidebar
时,它工作正常。我在这里做错了什么以及如何解决它?

为什么它不起作用?因为函数()绑定了它自己的函数

您可以做的一件事是使用不绑定自己的
this
-如下所示:

BindEvents:function(){
    this.PrtmEle.BODY.on('click',this.PrtmEle.HAMBURGER,() => {
        this.CollapseSidebar();
    });
}
在内部单击函数
,该
将引用
窗口
——因此您可以创建如下所示的临时变量或使用箭头函数:


谢谢,但我真的想知道=>在这里意味着什么以及它是如何工作的。这就是所谓的箭头函数-与
function(){
的工作原理相同,只是它没有给你
这个
参数
-链接了上面的文档:)
BindEvents:function() {
    let $this = this;
    this.PrtmEle.BODY.on('click',this.PrtmEle.HAMBURGER,function() {
        $this.CollapseSidebar();
    });
}