- 论坛徽章:
- 0
|
* 静态类与密封类
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 = "www.g.cn";
//如果不注释掉,这句执行会出错,因为Foo类中没有url
bar.url = "www.g.cn";
for(var i in foo){
trace(i + ":" + foo);
}
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("www.g.cn");
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;
}
}
本文来自ChinaUnix博客,如果查看原文请点:http://blog.chinaunix.net/u3/93876/showart_2160832.html |
|