收藏本站腾讯微博新浪微博

经典论坛

 找回密码
 注册

QQ登录

只需一步,快速开始

蓝色理想 最新研发动态 网站开通淘帖功能 - 蓝色理想插件 论坛内容导读一页看论坛 - 给官方提建议

论坛活动及任务 地图和邮件任务 请多用悬赏提问 热夏来袭,选一款蓝色理想的个性T恤吧!

手机上论坛,使用APP获得更好体验 急需前端攻城狮,获得内部推荐机会 论坛开通淘帖功能,收藏终于可以分类了!

搜索
查看: 3552|回复: 4

[AS3] AS3中有没有委托,换句话说,我希望执行这段函数时,另一段被自动执行……

[复制链接]
发表于 2008-9-26 15:57:37 | 显示全部楼层 |阅读模式
C#中有委托与事件的概念
你可以把一个函数加到一个委托中,执行到委托的时候,委托中的函数可以自动执行
比如说,
你封装了一个发邮件的类,就叫SmtpMail类,在发送邮件(Send方法)失败时,允许类的的使用者执行一个自定义的操作,然后这个SmtpMail类再抛出异常……
如果用委托的话,
你可以写一个方法,叫LogError什么的
protected void LogError(msg:String):void
把这个方法加到SmtpMail的Send方法上,

实例化Smtp类
添加自定义方法(LogError)到委托上来
调用Send函数
SMTPMail就会先发送,出错,执行你的方法(LogError),抛出异常……

当然举这个例子并不一定合适
我只是想问,在AS3中,是否有这样一种机制,当触发一个动作的时候,能够自动引起另一个动作的发生,
是不是只有手动调用该函数或向它dispatchEvent才能触发它的动作,这是不是有点不方便呢
回到我举的例子,
当我在写SmtpMail类的时候,我还不知道这个类的使用者的想法,
我也不知道他是不是希望在发送失败的时候先LogError,再抛异常
我也不知道他会不会把这个函数名字取成LogError,
也许他命名的名字叫做LogMyError,也说不一定。
所以,到AS3的时候,如果有这个问题,该怎么办呢?

[[i] 本帖最后由 99love 于 2008-9-26 15:59 编辑 ]
发表于 2008-9-26 17:11:17 | 显示全部楼层
AS3有 Proxy 是不是能用上?
回复 支持 反对

使用道具 举报

 楼主| 发表于 2008-9-26 17:36:57 | 显示全部楼层
呵呵Proxy我不明白是什么,回头看看
对于这个问题,是我对AS3的机制没有理解到
其实AS3也可以达到一样的效果,与C#同理的,呵呵,人笨了,自己写了一小段代码,就明白了
docment class:

  1. package {
  2.         import flash.display.Sprite;
  3.         import flash.events.Event;
  4.         public class App extends Sprite {
  5.                 private var _test:Test;
  6.                 public function App() {
  7.                         _test=new Test();
  8.                         _test.addEventListener("TestEvent",mylogError);
  9.                         _test.Send();
  10.                 }
  11.                 protected function mylogError(e:Event):void{
  12.                         trace("logged");
  13.                 }
  14.         }
  15. }
复制代码

Test class

  1. package {
  2.         import flash.display.Sprite;
  3.         import flash.events.Event;
  4.         public class Test extends Sprite {

  5.                 public function Send():void {
  6.                         this.dispatchEvent(new Event("TestEvent"));
  7.                 }
  8.         }
  9. }
复制代码

实际上,这与C#的委托事件的原理是一样的,呵呵,输出结果:
logged
回复 支持 反对

使用道具 举报

发表于 2008-9-26 20:27:27 | 显示全部楼层
哈哈, 事件机制是很方便的, 也很好理解
回复 支持 反对

使用道具 举报

发表于 2008-9-28 12:46:21 | 显示全部楼层
AS是异步脚本[不是程序]
So容错代码要你自己写没有现成的事件机制给你

你硬要这么干的话可以在程序外做个独立监听

主程序:1 完成事件1后赋值全局参数 A=T
       2 完成事件2后赋值全局参数 A=T
       3 .........

独立监听: if (A==T){
             A=F;
             启动下一事件;
               报告完成情况;
               }

我通常用这样的办法来调试大型AS代码取得各个函数的输入输出结果。

当然对小型AS直接用Proxy 也不错

[[i] 本帖最后由 moonsun 于 2008-9-28 12:49 编辑 ]
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

QQ|小黑屋|Archiver|手机版|blueidea.com ( 湘ICP备12001430号 )  

GMT+8, 2020-4-8 01:07 , Processed in 0.094487 second(s), 9 queries , Gzip On, Memcache On.

Powered by Discuz! X3.2 Licensed

© 2001-2013 Comsenz Inc.

快速回复 返回顶部 返回列表