2014-06-24 186 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()