新的委托机制也许需要得到更多的关注。下面这个例子,与事件机制无关,它只是FLASH API的一部分,是语言本身的一种特性。我们建立一个简单的名叫Test2的class,包含一个方法,并把一个function作为参数传递。
package {
import flash.util.trace;
import flash.display.MovieClip;
public class Test
extends MovieClip
{
public function Test() {
var t2:Test2 = new Test2();
// use a member method as parameter
t2.run( onCompleteT2);
//use a anonymous function as parameter
var ref:Test = this;
t2.run( function(){
trace("Test::anonymous function " + this + ":" + ref);
});
}
public function onCompleteT2(){
trace("Test::onCompleteT2 " + this);
}
}
private class Test2
{
public function run( onComplete:Function){
trace("Test2::run");
onComplete();
}
}
}
从trace的第二行信息你可以看到,onCompleteT2的作用范围被限制在Test中。我们不再需要利用Delegate.create或者局部变量去规定这个作为参数的函数的作用范围了。从最后的trace结果可以看出,这个方法仍然运行。同时请注意,匿名的functions不再自动地将活动范围限定于_root,而是global了,这一点你也可以从最后的trace结果看到。
package {
import flash.util.trace;
import flash.display.MovieClip;
public class Test
extends MovieClip
{
public function Test() {
var t2:Test2 = new Test2();
// use a member method as parameter
t2.run( onCompleteT2);
//use a anonymous function as parameter
var ref:Test = this;
t2.run( function(){
trace("Test::anonymous function " + this + ":" + ref);
});
}
public function onCompleteT2(){
trace("Test::onCompleteT2 " + this);
}
}
private class Test2
{
public function run( onComplete:Function){
trace("Test2::run");
onComplete();
}
}
}
从trace的第二行信息你可以看到,onCompleteT2的作用范围被限制在Test中。我们不再需要利用Delegate.create或者局部变量去规定这个作为参数的函数的作用范围了。从最后的trace结果可以看出,这个方法仍然运行。同时请注意,匿名的functions不再自动地将活动范围限定于_root,而是global了,这一点你也可以从最后的trace结果看到。
回复Comments
作者:
{commentrecontent}