/*下面的示例使用类 ObjectExample1 和 Circle 来证实 Object 类的动态性质,
以及值对象如何转换为 Shape 对象,然后添加到舞台上指定的 x/y 坐标处。
该示例创建值对象 firstObject 和 secondObject。
自定义类 Circle 可接受值对象并在该对象上循环,
同时将其匹配的内部属性设置为值对象中所定义的值。*/
package
{
import flash.display.Sprite;
public class ObjectExample2 extends Sprite
{
private var firstObject:Object;
private var secondObject:Object;
private var firstCircle:Circle;
private var secondCircle:Circle;
public function ObjectExample2()
{
//创建Object对象并动态添加属性
firstObject = new Object();
firstObject.xRadius = 25;
firstObject.yRadius = 25;
firstObject.radius = 10;
firstObject.bgColor = 0x333333;
firstCircle = new Circle(firstObject);
addChild(firstCircle);
//创建Object对象并动态添加属性
secondObject = {xRadius:100,yRadius:100,radius:10,bgColor:0xFF00FF};
secondCircle = new Circle(secondObject);
addChild(secondCircle);
}
}
}
import flash.display.Shape;
class Circle extends Shape
{
public var xRadius:int;
public var yRadius:int;
public var radius:int;
public var bgColor:uint;
public function Circle(obj:Object)
{
/*下面这段代码虽然在编译的时候不会报错,但这段代码没有执行。
在Object中没有静态属性length,而这里的obj.length仅是认为Object对象添加的动态属性,
没有给它赋予初值,故为0。*/
/*for(var i :int = 0 ; i <obj.length; i ++)
{
this[i] = obj[i];
}*/
//i表示的属性,而不是数组下标
for(var i:String in obj )
{
this[i] = obj[i];
}
draw();
}
private function draw():void
{
graphics.beginFill(bgColor);
graphics.drawCircle(xRadius,yRadius,radius);
graphics.endFill();
}
}