Pay for Hesitation: Dynamic Class

Pages

2008年3月20日 星期四

Dynamic Class

晨型人早安~ 那個目標我今天晚點回喔~~

在Java中, 通常被宣告的物件是特定的class而來的, 宣告出來後我們可以使用定義於該class的methods,
比如說,
class Person {
public String name;
}
然後我們可以這樣使用,
Person p = new Person();
p.name = "Redbug";
System.out.println(p.name);
在ActionScript中當然也可以做到這樣, 但是它提供更彈性的作法 :p (之前我們曾經想要確認的)
就是dynamic class, 它可以讓我們在程式中動態(run-time)加入新的methods與fields, 用法如,
dynamic class Person {
var name:String;
}
我們在Person這個已經定義的class type可以動態加入變數和method,
Person p= new Person();
p.name="Redbug";
p.age=25;
p.printMe = function () {
trace (p.name, p.age);
}
p.printMe(); // Redbug 25
不過dynamic仍然有些限制, 也就是我們只能加入public的fields和methods,
對於所有private的東西我們都是不能動的,

在AS3中, 我們可以隨意動態地將method associate給dynamic object的field,
function calcTax():Number {...}
var myObject:SomeObject = new SomeObject();
myObject.tax=calcTax; //add the tax property and attach the function calcTax()
var myTax=myObject.tax();
不會再用到它的話,可以把它destroy掉, 讓garbage collection把它消滅,
delete calcTax();
myTax=myObject.tax() // generates an error
在Flex中, 有些class本身就被定義是dynamic的, 如Object, Array, MovieClip, TextField...
值得注意的是, 當我們去繼承這些dynamic class所產生的subclass預設並非dynamic,
因此如果在這時候去對subclass做屬於dynamic class的operation是會產生run-time error的.

沒有留言: