目标:我试图通过使用“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());
}
});
最佳答案
我并没有完全遵循您的最终目标,因此一些理论希望可以帮助您实现目标:
当您通过对象的属性调用函数时(因此,通过点分符号或 []
符号),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 methodscall
是所有(真实)JavaScript 函数的一个属性,专门提供以方便调用函数和设置内容 this
在通话期间应该是(上下文是什么)。还有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
完全取决于函数的调用方式,而不是它的定义位置——我想你知道,根据你的问题,但无论如何值得标记。
关于jquery - 如何用这个调用调用者命名空间的函数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5961349/