在Java中, 通常被宣告的物件是特定的class而來的, 宣告出來後我們可以使用定義於該class的methods,
比如說,
class Person {然後我們可以這樣使用,
public String name;
}
Person p = new Person();在ActionScript中當然也可以做到這樣, 但是它提供更彈性的作法 :p (之前我們曾經想要確認的)
p.name = "Redbug";
System.out.println(p.name);
就是dynamic class, 它可以讓我們在程式中動態(run-time)加入新的methods與fields, 用法如,
dynamic class Person {我們在Person這個已經定義的class type可以動態加入變數和method,
var name:String;
}
Person p= new Person();不過dynamic仍然有些限制, 也就是我們只能加入public的fields和methods,
p.name="Redbug";
p.age=25;
p.printMe = function () {
trace (p.name, p.age);
}
p.printMe(); // Redbug 25
對於所有private的東西我們都是不能動的,
在AS3中, 我們可以隨意動態地將method associate給dynamic object的field,
function calcTax():Number {...}不會再用到它的話,可以把它destroy掉, 讓garbage collection把它消滅,
var myObject:SomeObject = new SomeObject();
myObject.tax=calcTax; //add the tax property and attach the function calcTax()
var myTax=myObject.tax();
delete calcTax();在Flex中, 有些class本身就被定義是dynamic的, 如Object, Array, MovieClip, TextField...
myTax=myObject.tax() // generates an error
值得注意的是, 當我們去繼承這些dynamic class所產生的subclass預設並非dynamic,
因此如果在這時候去對subclass做屬於dynamic class的operation是會產生run-time error的.
沒有留言:
張貼留言