Namespace屬於一特定的class,每次宣告namespace mySpace;時,會自動建立該class (instance?)
package idv.ticore {
import flash.util.*;
public class C {
namespace ns;
ns var name:String;
public function C() {
trace(ns); // output: ns$0
trace(C.ns); // output: ns$0
trace(idv.ticore.C.ns); // output: ns$0
trace(ns is Namespace); // output: true
ns::name = "Cns";
trace(ns::name);
}
}
}
Namespace可以宣告在function block內、class內部或是package之下
package idv.ticore {
import flash.util.*;
private namespace packageNs;
//packageNs var packageVar:String = "";
//使用者定義的namespace只能用在class內部
public class C {
namespace classNs;
classNs var classVar:String = "classVar with classNs";
packageNs var classVar:String = "classVar with packageNs";
public function C() {
namespace localNs;
localNs var localVar:String = "localVar with localNs";
classNs var localVar:String = "localVar with classNs";
packageNs var localVar:String = "localVar with packageNs";
trace(classNs::classVar); // output: classVar with classNs
trace(packageNs::classVar); // output: classVar with packageNs
trace(localNs::localVar); // output: localVar with localNs
trace(classNs::localVar); // output: localVar with classNs
trace(packageNs::localVar); // output: localVar with packageNs
}
}
}
建立在package底下的namespace可以使用public、internal、private存取修飾子;
使用public、internal修飾子的時候,該namespace必須要單獨宣告在一個.as file內,並且以該namespace為檔名
packageNs.as:
package idv.ticore {
public namespace packageNs;
}
public可以當做一個namespace直接使用
package idv.ticore {
import flash.util.*;
public class C {
public var classVar:String = "public::classVar";
public function C() {
trace(public::classVar); // output: public::classVar
}
}
}
package idv.ticore {
import flash.util.*;
public class C {
public namespace ns;
public::ns var Var:String = "ns::Var";
public function C() {
trace(ns::Var);
trace((public::ns)::Var);
trace((((public)::ns)::Var));
trace(this.ns::["Var"]);
}
}
}
namespace可以疊加使用
package idv.ticore {
import flash.util.*;
public class C {
namespace ns1;
ns1 namespace ns2;
ns1::ns2 namespace ns3;
(ns1::ns2)::ns3 namespace ns4;
ns1::ns2 var classVar:String = "ns1::ns2::classVar";
(ns1::ns2)::ns3 var classVar:String = "ns1::ns2::ns3::classVar";
public function C() {
trace((ns1::ns2)::classVar); // output: ns1::ns2::classVar
trace(((ns1::ns2)::ns3)::classVar); // output: ns1::ns2::ns3::classVar
}
}
}
宣告在class內部的namespace無法在class以外取用該scope之變數;
將namespace宣告為public僅僅能夠存取namespace class本身,而非該scope底下之變數
public namespace使用方式
test.mxml:
<mx:application xmlns:mx="http://www.macromedia.com/2005/mxml">
xmlns="*" creationComplete="init();">
<mx:script>
<!--[CDATA[
import flash.util.*;
import idv.ticore.*;
public function init ():Void {
var c:C = new C();
trace(c.ns::Var);
trace(c.ns::["Var"]);
}
]]>
</mx:script>
</mx:application>
ns.as:
package idv.ticore {
public namespace ns;
}
C.as:
package idv.ticore {
import flash.util.*;
public class C {
ns var Var:String = "ns::Var";
public function C() {
trace(ns::Var);
trace(this.ns::Var);
trace(this.ns::["Var"]);
}
}
}