actionscript3中的动态类(dynamic class)

五月 15, 2009 in RIA Flex

 

如Java或者C++这样面向对象语言中,只有通过实例化类来创建一个对象,对象只能访问类中定义的属性和方法,如下面Employee的定义:

1
2
3
4
class Employee {
  String firstName;
  String lastName;
}

 

在程序中只能通过如下的方式来访问属性:

1
2
3
4
Employee emp = new Employee();
emp.firstName = "arone";
emp.lastName = "zhang" ;
System.out.println(emp.lastName + "," + emp.firstName);

 

而在actionscript中,这样的类被叫做sealed,而它还提供了另外一种类叫做动态类(Dynamic Class),可以在运行时通过程序来添加新的属性或方法,只要在类定义的时候添加关键字:dynamic 就可以,下面通过创建一个DynamicClass类

?View Code ACTIONSCRIPT
1
2
3
4
5
6
7
8
9
10
package
{
  public dynamic class DynamicClass
  {
    public var description:String;		
    public function DynamicClass()
    {
    }
  }
}

 

下面创建一个TestDynamicClass来来动态添加属性 dynamicName 和方法 dynamicFunction :

?View Code ACTIONSCRIPT
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
package {
  import flash.display.Sprite;	
 
  public class TestDynamicClass extends Sprite
  {
    public function TestDynamicClass()
    {
      var dynamicClass:DynamicClass = new DynamicClass();
      dynamicClass.description = "this's test.";
      trace("dynamic class description: " + dynamicClass.description);
 
      dynamicClass.dynamicName = "dynamicName" ;
      trace("dynamic property: " + dynamicClass.dynamicName);
 
      dynamicClass.dynamicFunction = function(){
        trace(dynamicClass.description,dynamicClass.dynamicName);
      }
 
      dynamicClass.dynamicFunction();
    }
  }
}

 

运行后,输出如下的结果:

1
2
3
dynamic class description: this's test.
dynamic property: dynamicName
this's test. dynamicName

 

需要注意的是,如果一个继承动态类的类,默认情况下并不是动态类

 

相关文章:

  1. WebService系列:Office VBA调用已安全性认证的Web Service
  2. Flex中使用ItemRenderer实现表格行超链接
  3. 在Groovy中调用ViewImpl与ViewRowImpl的方法

Leave a reply

You must be logged in to post a comment.