2014-06-24 250 views
0

我有一個JavaScript對象與一些方法,一些方法引用對方。這些方法在某些情況下變得不確定,無論使用關鍵詞「this」。我不知道如何去做。下面是我的對象的一個​​片段。當點擊具有onClickMngLinksBtn事件綁定的按鈕時,在onClickMngLinksBtn方法中訪問時,方法getContent()變得未定義。這種方法工作得很好,當訪問:javascript對象 - 無法訪問的方法

InLineLinksObj.getContent() 

我希望解決方案是非常基本的對象在JavaScript中的東西。任何幫助深表感謝。

function InLineLinks(formController, fieldController) 
{ 
    .... 

    this.getContent = function(){  
     var field = this.getFieldController().getCustomFieldByName(this.content_field); 
     if(field){ 
      return field.getValue();    
     } 
     return null; 
    }; 

    this.onClickMngLinksBtn = function(){ 
     var links = []; 
     var txt = this.getContent(); 
    } 
    .... 
} 
+0

什麼是上下文這些方法叫什麼名字?什麼情境是未定義的?他們定義了什麼上下文?請舉例。 – bloodyKnuckles

+0

InLineLinks對象被創建,並且在「準備文檔」中加載內容後添加按鈕。 – lw0

回答

1

hereherehere,或許多其他地方的範圍作出解釋,並在JavaScript中this關鍵字。從本質上講,

this always refers to the 「owner」 of the function we're executing

,當你的方法是通過DOM事件觸發,那麼主人要麼是窗口或者被點擊(或將鼠標懸停等)的HTML元素,而不是包含對象。

在你的情況下,一個簡單的方法是定義第二個變量self,它將保留對包含對象的引用。

function InLineLinks(formController, fieldController) { 
    var self = this; 
    .... 

    self.getContent = function(){  
     var field = self.getFieldController().getCustomFieldByName(self.content_field); 
     if(field){ 
      return field.getValue();    
     } 
     return null; 
    }; 

    self.onClickMngLinksBtn = function(){ 
     var links = []; 
     var txt = self.getContent(); 
    } 
    .... 
} 
+0

真棒!非常感謝! – lw0

0

你有它的方式,InLineLinks是一個構造函數和getContent是它的實例的方法。

然後,你必須實例InLineLinks達到getContent

new InLineLinks().getContent()