`
hideto
  • 浏览: 2678823 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

method_missing in ActionScript 3/Flex

阅读更多
method_missing in ActionScript 3/Flex

method_missing in ActionScript 3/Flex

method_missing是Ruby magic中的一员,如果合理使用它可以用来做非常amazing的事情,而不正确的使用也会导致
非常危险的后果。Rails dynamic finders是一个好例子。这里是一些其他的例子

AS3中使用Proxy class也可以实现类似method_missing的东西。这里是一个简单的例子:
import flash.utils.Proxy;
import flash.utils.flash_proxy;

dynamic public class BaseProxy extends Proxy
{
  flash_proxy override function callProperty(method: *, ...args): * {
    try {
      this[method].apply(this, args);
    } finally {
      return methodMissing (method, args);
    }
  }

  protected function methodMissing(method : *, args : Array) : Object {
    throw{ new Error("Method Missing")};
  }
}

callProperty方法在这个类以及集成这个类的类的一个方法被调用时调用。如果我们创建另一个集成它的类:
public dynamic class Model extends BaseProxy
{
  public function myMethod (arg1 : String, arg2 : Boolean) : String {
    return arg1 + " " + arg2;
  }
}

然后允许下面的语句:
import flash.display.Sprite;

public class MethodMissingExample extends Sprite
{
  public function MethodMissingExample()
  {
    var m : Model = new Model();
    trace(m.myMethod("I exist", true));
    trace(m.someMethod(0, false, "x"));
  }
}

你将会在console看到如下内容:
I exist true
Error: Method Missing

第一个调用成功了,因为myMethod定义了。someMethod没有定义,所以callProperty里的try块失败并抛出一个Method Missing错误。

现在,如果我们像这样在Model类里覆盖methodMissing:
public dynamic class Model extends BaseProxy
{
  public function myMethod (arg1 : String, arg2 : Boolean) : String {
    return arg1 + " " + arg2;
  }

  override protected function methodMissing(method : *, args : Array) : Object {
    return "You called " + method + " with" + args.toString();
  }
}

然后运行上面的trace语句,你将在console看到如下内容:
I exist true
You called someMethod with 0,false,x
分享到:
评论

相关推荐

    flex3-cn-api..zip_flex_flex 3 api_flex3 api_flex3 a_flex3 api

    在“flex3-cn-api..zip_flex_flex 3 api_flex3 api_flex3 a_flex3 api”这个压缩包中,包含了Flex 3 API的中文文档,这对于Flex开发者来说是一个非常宝贵的资源。文档名为“Flex3拞暥API..chm”,其中的“拞暥”可能...

    EmployeeManager.zip_LCDS Flex_flex_flex LC_flex lcds

    本文将以"EmployeeManager.zip_LCDS Flex_flex_flex LC_flex lcds"为例,深入探讨Flex与LCDS在构建基于RIA的应用程序时的关键知识点。 标题"EmployeeManager.zip"暗示这是一个关于员工管理的项目,而"LCDS Flex"则...

    Actionscript/Flex 3.0 Coding Convention 代码规范 v1.1

    Actionscript/Flex 3.0 Coding Convention 代码规范 v1.1 是一份由艺思哲软件(上海)有限公司在2008年发布的详细编程规范文档,旨在为ActionScript 3.0和Flex 3.0开发者提供一套统一的编码标准,提升代码质量和可读性...

    flex+php.rar_Flex+PHP_PHP Flex_felx p_flex_flex php

    在"flex+php.rar_Flex+PHP_PHP Flex_felx p_flex_php"这个压缩包中,我们可以看到两个关键文件:"www.pudn.com.txt"和"rest_with_database"。这可能代表了两种不同的交互方式:通过Web服务和数据库操作。 1. **Flex...

    flex-menu.rar_Flex 4_Menu_flex_flex Menu_flex 菜单

    Flash Builder 4是基于Eclipse IDE的开发工具,用于创建、测试和调试Flex和ActionScript项目。 Flex 4中的菜单系统是用户界面设计的关键部分,它提供了可自定义、交互式的下拉菜单功能。在Flex 4中,菜单组件的使用...

    DDP.rar_ActionScript3.0_flex

    在本项目"DDP.rar_ActionScript3.0_flex"中,我们主要关注的是一个使用这些技术实现的对对碰小游戏。 ActionScript3.0是Flash Player和Adobe AIR平台上的编程语言,它基于ECMAScript,提供了面向对象的特性和高性能...

    Flex_3_with_Java Flex_3_with_Java

    ActionScript 3.0 (AS3) 是 Flex 3 开发中的主要编程语言。它是一种面向对象的编程语言,支持类、接口、事件处理等高级编程特性。相比于早期版本,ActionScript 3.0 在性能方面有了显著提升,尤其是在处理大量数据和...

    flex_src.rar_CMS合同_flex_flex CMS opensource_flex java_flex 应用

    1. Flex:Flex是一种用于构建富互联网应用程序(RIA)的开源框架,主要基于ActionScript编程语言和MXML标记语言。它由Adobe公司开发,允许开发者创建具有丰富图形用户界面的应用程序,这些应用程序能够在多个浏览器...

    ArcGIS_Flex.rar_ArcGIS flex_ArcGIS_Flex_NavigationSkin.mxml_arc

    4. `arcgis_fl`与`arcgis_flex` 这两个标签可能是指ArcGIS与Flex的结合,`arcgis_fl`可能是一个简写或缩写,代表ArcGIS在Flex环境下的应用开发。它们强调了GIS功能与Flex编程的融合,为开发者提供了灵活、可扩展的...

    arcgis_flex.rar_FLEX ARCGIS_arcgis_arcgis flex_flex

    3. **案例分析**:提供示例代码和实际应用案例,帮助理解如何将GIS功能集成到Flex应用中。 4. **最佳实践**:分享开发过程中的一些最佳实践,如性能优化、错误处理和用户体验设计。 5. **教程和指南**:逐步指导...

    《Flex第一步_基于ActionScript 3.0的Flex 2应用开发

    《Flex第一步:基于ActionScript 3.0的Flex 2应用开发》这本书是为初学者设计的,旨在帮助读者快速掌握Adobe Flex 2框架的使用,特别是与ActionScript 3.0的集成。Flex是一个开源的开发平台,主要用于构建富互联网...

    Demo.rar_3d_flex_flex Graphic._pv3d flex_pv3d fl

    标题 "Demo.rar_3d_flex_flex Graphic._pv3d flex_pv3d fl" 提供的信息表明,这个压缩包包含了一个与3D图形相关的Flex应用程序的演示,使用了PV3D库。描述中提到“利用PV3D做的flex DEMO 实现了#3D特效”,进一步...

    ActionScript3学flex3必须掌握的东西

    ActionScript3学flex3必须掌握的东西,就是flex的javascript类似的东西,希望对大家有帮助

    dh.rar_flex cool me_flex menu skin_flex 导航_flex4 menu_flex4 menu

    这个"dh.rar_flex cool me_flex menu skin_flex 导航_flex4 menu_flex4 menu"的压缩包文件,显然是与Flex4相关的资源,特别是关于创建酷炫的菜单导航和皮肤设计。 在Flex4中,菜单(Menu)是一种常见的用户界面元素...

    ModestMaps-1.0.tar.gz_ flex map_flex_flex map_map flex_modestmap

    **ModestMaps是一个轻量级且灵活的开源地图库,主要设计用于AS2(ActionScript 2)和AS3(ActionScript 3)环境,同时也支持Python。该库以其高效和可扩展性著称,适合开发类似Google Map的交互式地图应用。** ### ...

    ActionScript-3.0.rar_FlashMX/Flex源码_Flex_

    通过阅读"ActionScript 3.0.pdf",你可以深入理解这些概念,学习如何使用AS3编写高效、可维护的代码,并且掌握如何利用Flex框架构建动态的Web应用程序。对于那些想要学习英文并同时提升Flex开发技能的人来说,这个...

    srl.rar_ColorMatrixArrays.as_SRL_flex_flex 操作系统_flex portal

    标题中的“srl.rar_ColorMatrixArrays.as_SRL_flex_flex 操作系统_flex_portal”提到了几个关键点,它们是“srl.rar”(压缩文件名)、“ColorMatrixArrays.as”(一个AS(ActionScript)文件)、“SRL”(可能是一...

    UserInfoSys.rar_flex_flex strut_flex struts _flex struts2 list_s

    系统文件“UserInfoSys”很可能包含了整个项目的源代码结构,包括Flex的MXML和ActionScript文件,以及Struts2的Action、配置文件(struts.xml)等。通过深入研究这些文件,开发者可以了解系统架构,学习如何在实际...

    paopaolong.rar_actionscript_flex_game_paopaolong

    《泡泡龙游戏源码解析——基于Flex/Flash的ActionScript 3实现》 泡泡龙是一款深受全球玩家喜爱的经典消除类游戏,它通过发射不同颜色的泡泡来实现匹配消除,具有简单易懂的操作和丰富的关卡设计。本篇将深入探讨一...

Global site tag (gtag.js) - Google Analytics