在这个例子中:
public function Roulette() {
new QuickLoad(url, function (o:*):void {trace(this);});
}
当 QuickLoad 实例执行其操作时,它会调用匿名函数。有人会认为 此 是轮盘。但不,它原来是匿名函数的调用者, QuickLoad 。
这至少可以说是奇怪的,说我怎么能在里面传递“正确的” 这个 (即轮盘实例)匿名函数,如果我不这样做正常方式?
答案 0 :(得分:2)
只需将外部this
实例保存在其他名称下即可保留:
public function Roulette() {
var rouletteThis = this;
new QuickLoad(url, function (o:*):void {trace(rouletteThis);});
}
答案 1 :(得分:2)
有一种方法可以使用备用this
指针调用函数,但由于您的函数是从new QuickLoad()
内调用的,因此您需要更改那个调用语句,并将您的this
作为轮盘传递给构造函数。您的新QuickLoad
对象不知道其周围环境,甚至构造函数的调用者也不知道。因此,您需要了解它,将this
指针从Roulette()
传递到QuickLoad()
,然后通过传递备用QuickLoad
指针从this
调用该函数
public function QuickLoad(url:String,caller:Object=null,callback:Function=null) {
// initialization code
if (callback!=null) {
if (caller!=null) callback.apply(caller,[o]);
else callback.apply(this,[o]);
}
}
...
public function Roulette() {
new QuickLoad(url, this, function (o:*):void {trace(this);});
}
如果参数数组具有固定长度,也可以使用call()
方法。 callback.call(caller,o);
答案 2 :(得分:1)
通常,在此上下文中,this
指的是一个对象。引用一个相当臭名昭着的首字母缩略词:INABIAF(它不是一个bug,它是一个特色),LOL。所以,是的,调用该函数的对象实例QuickLoad将是this
默认查看的内容。
我知道有一个例外(在很多人中,我确定)...你可以得到任何东西......变量,函数,对象,等等,通过这个["对象名称& #34]。但那是暂时的。
还有其他解决方法,我确定,这可能会或可能不适用于您的目的。这是传递函数的一种方式,在许多方面,它是我最常用的函数。
函数没有实例。他们不是对象。如果你想将一个函数作为参数发送到另一个函数,你只需传递它,如下面这个相当奇怪的例子。
//This function accepts a function as an argument.
function bridgeOfQuestions(person:String, response:Function):void
{
if(person == "King Arthur")
{
response("What is the average airspeed velocity of an unladen swallow?");
}
else
{
response("What is your favorite color?");
}
}
//This is the function we're going to pass.
function askQuestion(question:String):void
{
trace(question);
}
//Here, we call bridgeOfQuestions and pass it the askQuestion function.
//NOTE: Leave off the parenthesis on the function being passed!
bridgeOfQuestions("Sir Lancelot", askQuestion);
bridgeOfQuestions("King Arthur", askQuestion);
编辑:如果只是名称您正在传递,则函数是永久性的函数。与对象不同,它不会改变,正如我所说,它没有实例。因此,如果您只想打印出该功能的名称,则只能使用trace("Roulette")
。