如何用这个来调用调用者命名空间的函数?

时间:2011-05-11 08:28:50

标签: jquery function namespaces

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

另一个初学者的问题:我正在调用与调用者相同的名称空间的函数。我用谷歌搜索,有人说:this.myfunction会起作用,但事实并非如此。有任何想法吗?感谢。

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

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

我试过这样做:this.accept,但是firebug说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());
        }
    });

1 个答案:

答案 0 :(得分: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应该是什么( context 是)在通话期间。还有apply,它完全相同但接受将参数作为数组传递给函数而不是作为离散参数。例如,这两个电话是相同的:

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

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

所有这一切都成为可能,因为在JavaScript中,this完全由如何调用函数决定,而不是在哪里定义 - 我认为你知道这一点,根据你的问题,但无论如何都值得一试。