Actionscript 3 问题3:什么是';这';在匿名函数中?

Actionscript 3 问题3:什么是';这';在匿名函数中?,actionscript-3,this,anonymous-function,Actionscript 3,This,Anonymous Function,在本例中: public function Roulette() { new QuickLoad(url, function (o:*):void {trace(this);}); } 当QuickLoad实例执行其任务时,它调用匿名函数。有人会认为这是轮盘赌。但不是,它原来是匿名函数的调用者,即QuickLoad 至少可以这么说,这很奇怪,比如说如果我不按正常的方式在匿名函数中传递“正确的”这个(即轮盘赌实例)?只需将外部的这个实例保存在不同的名称下即可: p

在本例中:

    public function Roulette() {
        new QuickLoad(url, function (o:*):void {trace(this);});
    }
QuickLoad实例执行其任务时,它调用匿名函数。有人会认为这是轮盘赌。但不是,它原来是匿名函数的调用者,即QuickLoad


至少可以这么说,这很奇怪,比如说如果我不按正常的方式在匿名函数中传递“正确的”这个(即轮盘赌实例)?

只需将外部的
这个
实例保存在不同的名称下即可:

public function Roulette() {
    var rouletteThis = this;
    new QuickLoad(url, function (o:*):void {trace(rouletteThis);});
}

只需将外部<代码>此实例保存在另一个名称下,即可将其保留:

public function Roulette() {
    var rouletteThis = this;
    new QuickLoad(url, function (o:*):void {trace(rouletteThis);});
}

通常,在此上下文中,
指的是对象。引用一个相当臭名昭著的缩写词:INABIAF(它不是bug,它是一个特性),LOL。因此,是的,调用函数的对象实例QuickLoad将是默认情况下该所看到的

我知道有一个例外(我肯定是很多例外)…通过这个[“对象名称”],你可以得到任何东西…变量、函数、对象等等。但这是一个旁白

我敢肯定,还有其他的解决办法,对你的目的来说可能是可行的,也可能是不可行的。这是传递函数的一种方式,在许多函数中,这是我使用最多的一种

函数没有实例。它们不是物体。如果您想将一个函数作为参数发送给另一个函数,只需传递它,如下这个相当奇怪的示例所示

//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);

编辑:如果只是传递的名称,则函数是永久函数。它不会改变,不像一个对象,正如我所说,它没有实例。因此,如果您只想打印出函数的名称,则只需使用
跟踪(“轮盘赌”)
一般来说,在这种情况下,
引用一个对象。引用一个相当臭名昭著的缩写词:INABIAF(它不是bug,它是一个特性),LOL。因此,是的,调用函数的对象实例QuickLoad将是默认情况下该所看到的

我知道有一个例外(我肯定是很多例外)…通过这个[“对象名称”],你可以得到任何东西…变量、函数、对象等等。但这是一个旁白

我敢肯定,还有其他的解决办法,对你的目的来说可能是可行的,也可能是不可行的。这是传递函数的一种方式,在许多函数中,这是我使用最多的一种

函数没有实例。它们不是物体。如果您想将一个函数作为参数发送给另一个函数,只需传递它,如下这个相当奇怪的示例所示

//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);

编辑:如果只是传递的名称,则函数是永久函数。它不会改变,不像一个对象,正如我所说,它没有实例。因此,如果您只想打印出函数名,您只需使用
跟踪(“轮盘赌”)
有一种方法可以使用另一个
这个
指针调用函数,但是由于您的函数是从
新的QuickLoad()
中调用的,因此您需要更改该调用语句,并将您的
作为轮盘赌传递给构造函数。新的
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(调用者,o)

有一种方法可以使用替代的
指针调用函数,但是由于您的函数是从
new QuickLoad()
中调用的,因此需要更改该调用语句,并将
作为轮盘赌传递到构造函数中。新的
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(调用者,o)

我不确定这是否正是他所要求的,尽管我确信这对目的是有用的。你如何让
这个
引用
轮盘赌()
函数,而不是
快速加载
对象。我不确定这正是他想要的,尽管我确信这对目的很有用。如何使
this
引用
roulete()
函数,而不是
QuickLoad
对象。