2016-07-24 30 views
0

我試圖訪問我的MyAccount類中的私有方法,但它給出的錯誤爲uncaught typeError: this.displayTabOnClick not a function。我可以清楚地確認這是一種私人方法,在MyAccount課程中可用,其他類似方法displayTabOnPageLoad完美。未捕獲的類型錯誤:不是TypeScript中私有方法的函數

下面的代碼片段:

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); 
+0

試圖編譯此代碼。如果排除缺少的方法,則不會出現錯誤。這兩種方法有什麼區別?實施似乎並不重要。嘗試定義一個最簡單的例子。 –

+0

page.switchTab()正在執行,但它傳遞給點擊處理程序時它相同的功能typeerror – ChanX

回答

1

你有調用$('.menu-link').click(page.switchTab);時範圍界定問題(的作用範圍是主叫方,而不是到page

其中一個選項來解決它:

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

還有一句:

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

因爲它保持了類型安全,所以我會選擇第一個。

+0

是啊..我怎麼能忘記'this'的詞法範圍..我的錯誤..讓我試試你的代碼 – ChanX

+0

順便說一句我不想傳遞'事件'作爲參數,因爲我可以得到該對象,而不通過參數 – ChanX

+0

仍然無法正常工作 – ChanX

相關問題