* 静态类与密封类
ActionScript3中用dynamic修饰的类是动态类,可以动态添加属性、方法。
不用dynamic修饰的类默认为密封类,不能动态添加属性方法。
例如:
package org.kingda.book.basicoop{
import flash.display.Sprite;
public class SampleDynamicClass extends Sprite{ public function SampleDynamicClass(){ var foo:Foo = new Foo(); var bar:Bar = new Bar();
//foo.url = "";
//如果不注释掉,这句执行会出错,因为Foo类中没有url bar.url = "";
for(var i in foo){ trace(i + ":" + foo[i]); }
for(var k in bar){ trace(k + ":" + bar[k]); } } } }
class Foo{
public var web:String = "Google";
}
class Bar{
public var web:String = "Google";
}
|
*ActionScript 3中并不支持方法重载。
可以用“...”关键字来实现类型的功能。做法:在方法的"()"中写入“...参数”,比如...someArgs。这时someArg其实是一个数组,持有输入的所有的参数。然后通过分析师someArgs的内容来执行不同的分支,达到函数重载的效果。
package com.test{ import flash.diplay.Sprite;
public class SampleOverload extends Sprite{ public function SampleOverload(){ overload(); overload(3); overload(""); overload(12,"sss",new Object()); } }
private function overload(...args):*{
if(args.length == 0){
return reportDefault();
}
if(args.length == 1){
if(typeOf(args[0]) == "number"){
return reportNumber(args[0]);
}else{
return reportErr(args[0]);
}
}
if(args.length > 1){
return reportArray(args);
}
}
private function reportDefault():Boolean{
trace("-_-b");
return false;
}
private function reportNumber(num:Number):Number{
trace("we got a number" + num);
return num;
}
private function report(obj:*):*{
trace("we don't understand this object" + obj);
return obj;
}
private function reportArray(ary:Array):Array{
trace("we got an array:" + ary);
return ary;
} } |
阅读(507) | 评论(0) | 转发(0) |