目标:我试图通过使用“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());
}
});
答案 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
完全由如何调用函数决定,而不是在哪里定义 - 我认为你知道这一点,根据你的问题,但无论如何都值得一试。