未捕获的typeError:不是TypeScript中私有方法的函数

时间:2016-07-24 06:14:44

标签: javascript jquery typescript

我正在尝试访问MyAccount类中的私有方法,但它的错误为uncaught typeError: this.displayTabOnClick not a function。我可以清楚地确认它是MyAccount类中的私有方法,其他类似方法displayTabOnPageLoad完美无缺。

以下是代码段:

MyAccount.ts文件

class MyAccount
{
  private displayTabOnClick(thisObj: JQuery, e:Event, callback?:()=>any): void {
    $(document).scrollTop(0);
    e.preventDefault()
    let hash = thisObj.prop('hash');

    // Update the location hash
    window.location.hash = hash;

    // Add Selected class to the current click elem
    // Remove selected class from other .menu-link elem
    thisObj.addClass('selected');
    $('.menu-link').not(thisObj).removeClass('selected');

    // Set Tab Header
    this.setHeader(hash);

    // Hide all sections
    // And display only the hashed section
    $('section').css('display','none');
    $(hash).css('display','block');
  }

  /**
  * Switch My Account Tab
  * According to the passed ID
  *
  * @return void
  */
  public switchTab (e?: Event): void {
      if (e && e.type === "click") {
          this.displayTabOnClick($('.menu-link'),e);
      }
      else {
          this.displayTabOnPageLoad($('.menu-link'));
      }
  }
}

App.ts文件

// My Account Page
let page = new MyAccount;

if (URL.checkPath('/user/myaccount')) {
    page.switchTab();
}

$('.menu-link').click(page.switchTab);

1 个答案:

答案 0 :(得分:2)

调用this时,您遇到了$('.menu-link').click(page.switchTab);范围问题(的范围限定为调用方,而不是page

修复它的其中一个选项:

$('.menu-link').click(e => page.switchTab(e));

另一个:

$('.menu-link').click(page.switchTab.bind(page));

我选择第一个,因为它保持了类型安全。