2006/02/21 | 体验AS3.0(十)
类别(Flash) | 评论(0) | 阅读(133) | 发表于 17:31
新的委托机制也许需要得到更多的关注。下面这个例子,与事件机制无关,它只是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结果看到。
0

评论Comments

日志分类
首页[186]
Flash[84]
FMS[41]
AIR[2]
ASP[11]
作品区[12]
其他[36]