`
hereson3
  • 浏览: 162976 次
  • 性别: Icon_minigender_2
  • 来自: 广州
社区版块
存档分类
最新评论

如何在AS3中使用global对象,来动态访问自定义类

阅读更多

关键词:  如何在AS3中使用global对象 ,来动态访问自定义类   责任编辑: frogg   创建日期: 2009-11-11 12:27:00

  本文适用于Actionscript 3和FLASH 9 PUBLIC ALPHA)(如若转载,请留下作者frogcjn的Blog链接:frogcjn.blogba.cn)在AS3之前,通常使用下列语句来动态访问自定义类. global.className;或global["className"];//动态访问的方法 而在AS3中,DisplayOblect及其

  本文适用于Actionscript 3和FLASH 9 PUBLIC ALPHA)(如若转载,请留下作者frogcjn的Blog链接:frogcjn.blogba.cn )
在AS3之前,通常使用下列语句来动态访问自定义类.

global.className;

global["className"];//动态访问的方法

而在AS3中,DisplayOblect及其子类中,根本没有global这个属性.所以要动态访问自定义类可就难了.
例如在名为Test.fla的FLASH文件中,设置它的"Document class"为Test.as ,然后编辑Test.as,再按"ctrl+enter"运行.(所有范例文件可在本文末端下载)
Test.as 内容:

package{
   import flash.display.*;
      public class  Test   extends  MovieClip {
         public function  Test (){
            var  a   = Math.floor(Math.random()*3);//随机设定a 的值为0,1或2
            trace(a );//输出数字a
            trace(global["Class"+a ]);//在这里本打算动态访问ClassN,
                                    //
正确的话应该输出"[class  classN ]".
                                    //可是由于没有global这个属性,
                                    //却输出"ReferenceError: Error #1065: 变量 global 未定义".
         }
      }
      public class Class0 {
      }
      public class Class1 {
      }
      public class Class2 {
      }
}

可见这个问题有多么烦人.
我的解决方法是在"package{}"之后加入"var global = this;",这样就可以动态访问在"package{}"内部自定义的类了.
例如在名为Test.fla的FLASH文件中,设置它的"Document class"为Test2.as
Test2.as 内容:

package{
   import flash.display.*;
      public class Test2 extends MovieClip{
         public function Test2(){
            var a = Math.floor(Math.random()*3);//随机设定a的值为0,1或2
            trace(a);//输出数字a
            trace(global["Class"+a]);//由于声明了global指向本package,所以正确输出"[class classN]"
         }
      }
      public class Class0 {
      }
      public class Class1 {
      }
      public class Class2 {
      }
}
var global = this;

那么在主时间轴上是否也可以访问在Test2.as中声明的global呢?
在Test.fla文件的第一帧写:

trace(global);

按"ctrl+enter"运行时输出"[object global]",所以global 也可以在外部使用.
那么Top level的类是否也可以通过声明的global 动态访问呢?你可以用下列语句试一试:

trace(global.Math);//输出"undefined"

答案是否定的,因为global 只能访问"package{}"内部的数据.

范例文件 :    AS3Global.zip

分享到:
评论

相关推荐

    一文读懂python3中的所有33个关键字及其用法.pdf

    例如,在 for 循环中使用 break,可以跳出当前循环。 8. class:类定义 class 是 Python 中的关键字,用于定义类。类是 Python 中面向对象编程的基础,主要用于封装、继承、多态等。 9. continue:跳出当前循环 ...

    VB6 正则表达式类

    类RegEx.cls是为VB6设计的一个包装器,它封装了VBScript的RegExp对象,使得在VB6项目中使用正则表达式变得更加方便。以下是一些关键知识点: 1. **创建正则表达式对象**:在VB6中,首先需要实例化RegEx类,这会创建...

    高级程序员测试题 比较不错

    3-3 读取目录下图片文件列表并显示,可以使用ASP.NET的文件系统类,如`Directory.GetFiles()`,然后在对话框中展示。点击图片后,将路径传递到父窗口。 3-4 上传文件的验证和处理,需要结合`HttpPostedFileBase`类...

    python面试常用的常用38题

    Python中的类可以使用装饰器@classmethod和@staticmethod来定义类方法和静态方法。classmethod可以访问类的所有实例,而staticmethod不能访问类的实例。 3. 删除列表中的重复元素 可以使用set方法或fromkeys方法来...

    asp上传和计数器

    在ASP中,文件上传通常需要自定义的类或组件来处理,因为ASP本身并不内置文件上传的支持。"aspupclass"可能包含了一个ASP上传组件,它能够接收用户通过表单上传的文件,并将这些文件保存到服务器的特定目录。这个类...

    asp.net 在global中拦截404错误的实现方法

    // 使用Server.Transfer来在服务器内部转移控制权到错误处理页面(例如,Error.aspx) // 这样可以保持原始URL不变,提供更好的用户体验 Server.Transfer("~/Error.aspx", false); } } } ``` 在上述代码中,...

    Stack-Overflow-About-Python-中文1

    在 Python 中,可以使用 `except Exception as e` 抓取多个异常类,但无法直接获取类的静态变量。静态变量通常是类属性,可以通过类名访问: ```python try: ... except ValueError as e: print(ValueError.my_...

    jscriptdeviationsfromes3

    例如,JScript 允许在数组字面量中使用计算属性名,这意味着数组元素可以通过表达式动态确定索引位置。 ##### 7. 函数表达式(Function Expressions): §11.2.5 JScript 支持 ES3 中定义的函数表达式,并在此基础...

    数据图标分析-如何生成动态图表(pyecharts模块)-Python实例源码.zip

    在Python代码中,我们需要导入必要的pyecharts类: ```python from pyecharts import options as opts from pyecharts.charts import Line ``` 然后,我们需要准备数据。这可以是列表、元组或其他可迭代对象,包含...

    powerbuilder 多线程示例

    在PowerBuilder中,我们可以使用`Thread`对象来创建新的线程。`threads.pbl`和`threads.pbt`文件很可能是包含了这个多线程示例的相关类库和项目文件。 首先,我们需要创建一个`Thread`对象,这可以通过调用`Create`...

    FreeMarker开发手册

    FreeMarker是一款强大的、开源的模板引擎,主要用于生成动态HTML、XML或其他格式的文本输出,尤其在Web应用开发中被广泛使用。它与Java语言紧密集成,但不包含任何业务逻辑,仅负责展示数据,实现视图层的分离。这份...

    VBA语法,使用Excel做一些简单的工具

    - **位运算符**:只适用于二进制数据,通常在低级别的编程中使用,但VBA不直接支持位运算。 3. **数据类型**: - VBA提供12种内置数据类型,如`String`、`Byte`、`Boolean`、`Integer`、`Long`、`Single`、`...

    office VBA 语言基础

    2. 动态数组:使用`Redim`语句在程序运行时调整大小,`Preserve`关键字保留原有数据。 **六、注释与赋值语句** 1. 注释语句:`'`或`Rem`开头的行被视为注释 2. 赋值语句:使用`=`将值分配给变量或对象属性,如`X = ...

    ORACLE数据库期末考试题目及答案.doc

    5. SQL别名:使用AS关键字可以为SQL查询中的列生成别名,例如`SELECT ename, sal*12 AS AnnualSalary FROM emp;` 6. 锁机制:在数据库中,锁用于保证数据的一致性和完整性,提供数据的安全性。 7. 不同类型的锁:...

    数据库dblink.pdf

    使用`CONN /AS SYSDBA`连接到数据库,然后使用`SHOW PARAMETER db_domain`和`SHOW PARAMETER db_name`查看`db_domain`和`db_name`的当前设置。 9. **DBLink与视图的区别** 虽然DBLink和视图都可以提供对远程数据...

    Laravel开发-laravel-doctrine

    **在控制器中使用Doctrine** 在控制器中,我们可以注入EntityManager或Repository来操作数据: ```php use EntityManager; use App\Repositories\UserRepository; class UserController extends Controller { ...

    在python中利用pyecharts库进行漏斗图的可视化描绘_pyecharts_python_漏斗图

    在Pyecharts中,创建漏斗图主要通过`Funnel`类来实现。下面是一个简单的示例: ```python from pyecharts import options as opts from pyecharts.charts import Funnel # 定义数据 data = [ {"name": "访问", ...

    spring-security 官方文档 中文版

    - **扩展安全对象模型**:允许开发者自定义安全对象来满足特殊需求。 **5.6 国际化** - Spring Security 提供了对国际化(i18n)的支持,使得开发者能够轻松地实现多语言界面。 #### 四、Spring Security 社区 - ...

    ExcelVBA编程教程.doc

    在VBA中,可以定义固定大小的数组(如`Dim XYZ(1 To 10 As Integer)`)和动态数组(用`Redim`在运行时调整大小,如`ReDim Preserve XYZ(5, 10)`)。动态数组特别有用,因为可以在程序运行时更改其大小,同时保留原有...

Global site tag (gtag.js) - Google Analytics