2011-05-11 56 views
1

目标:我试图通过使用“this”而不是名称空间字符串来缩短我如何在函数中调用相同名称空间的函数。但显然“this”不适用于函数,它只适用于一个变量。我想知道是由于我的错误使用,还是只使用命名空间字符串调用函数是唯一的方法。如何用这个调用调用者的命名空间的函数?

另一个初学者的问题:我调用与调用者相同的命名空间的函数。我GOOGLE了一下,有人通过调用说:this.myfunction可以工作,但它不会。有任何想法吗?谢谢。

我打来电话: singleEntry.editContent.accept(tinyMCE.get('editContentTa')。getContent());

来自: index.fragment.singleEntry.editContent.load

我试图做到这一点的:this.accept,但萤火说this.accept不是一个函数...

index.fragment.singleEntry.editContent.load = (function(singleEntry) { 
return function() { 
    // prepare edit dialog 
    $("#editContentDiv").dialog({ 
     autoOpen : false, 
     height : 500, 
     width : 600, 
     modal : true, 
     buttons : { 
      "OK" : function() { 
       singleEntry.editContent.accept(tinyMCE.get('editContentTa').getContent()); 
       $(this).dialog("close"); 
      }, 
      "CANCEL" : function() { 
       $(this).dialog("close"); 
      } 
     }, 
     open : function() { 
      // set value to the edit area 
      tinyMCE.get("editContentTa").setContent($("#veContent").html()); 
     } 
    }); 
+0

我已经验证,对于一个变量,this.variableName可以工作。但是对于一个没有的功能。 TJ,感谢, – 2011-05-11 08:37:05

回答

1

我不是很以下你的最终目标,所以一些理论,希望它可以帮助你到达那里:

你打电话时自动对焦通过对象的属性(因此,通过点符号或[]表示法),this内的函数调用将被对象引用。所以,当你调用

singleEntry.editContent.accept(tinyMCE.get('editContentTa').getContent()); 

...该呼叫内,this将参考singleEntry.editContent

如果你想this指别的东西,你可以用call

singleEntry.editContent.accept.call(thisObj, tinyMCE.get('editContentTa').getContent()); 
//       ^^^^^^^^^^^^^ 

...其中thisObj是你想要的功能,在通话过程中看到的this任何对象。更多在这里:Mythical methods

call是所有(实时)的JavaScript函数的性质,并具体规定,以方便调用功能,并设置this应该是什么(什么背景是)在呼叫。也有apply,它完全相同的事情,但接受参数作为数组传递给函数,而不是离散的参数。例如,这两个调用是相同的:它的定义,其中,因为在JavaScript中,this完全由确定的函数是如何调用,不

// Using `call` 
singleEntry.editContent.accept.call(thisObj, tinyMCE.get('editContentTa').getContent()); 

// Using `apply` 
singleEntry.editContent.accept.call(thisObj, [tinyMCE.get('editContentTa').getContent()]); 
//      Note the `[]` -----^ 

所有这一切都成为可能   —我想你知道根据你的问题,但值得标记。

+0

。克劳德。但我试图缩短我称之为相同命名空间的功能的方式...... – 2011-05-11 08:42:36

+0

“所有这一切都成为可能,因为在JavaScript中,这完全取决于函数的调用方式,而不是定义的位置 - 我认为您知道,基于您的问题,但值得标记。”好点子。这是我第一次了解它。 :D – 2011-05-11 08:44:39

+0

@Issac:JavaScript没有命名空间,只有对象(呃和范围)。恐怕我只是没有追随你的最终目标。你想成为什么样的“这个”,为什么? (并且:很高兴我把那张笔记包括在内,那么我不太清楚,和其他语言有很大的不同,所以我会试着突出它给人们。) – 2011-05-11 08:46:32

相关问题