訪問控制屬性:
public:公有屬性
private:私有類型的變量和方法只允許定義它們的類訪問,其他類訪問報(bào)錯(cuò),包括子類
internal:內(nèi)部對(duì)象既不是公有類型也不是私有類型,與定義對(duì)象的類具有相同類包的類才可以訪問,也就是說,擁有相同包聲明(例如 package {...}的任何類都可以調(diào)用方法或訪問變量)
protected:內(nèi)部類型將訪問權(quán)限限制為其他特定的類,而受保護(hù)類型與此類似,只有子類可以訪問受保護(hù)類型的對(duì)象。
作用域:
全局作用域:根時(shí)間軸中或在函數(shù)和類外部定義的任何對(duì)象都屬于全局作用域。(不提倡將對(duì)象定義在時(shí)間軸中)
局部作用域:根據(jù)對(duì)象的定義方式,局部訪問(或子作用域)可分為幾個(gè)不同的級(jí)別
類級(jí)(靜態(tài))變量和方法
這些對(duì)象存在于類級(jí)作用域中;換句話說,它們屬于類本身,而不是類的實(shí)例,可以使用static關(guān)鍵字來定義這些對(duì)象
package{
????? public class ScopeTest{
???????????? public static var foo:String = "bar";
}
}
可以使用類名加對(duì)象名來訪問這些對(duì)象。
trace(ScopeTest.foo);
在類中定義的代碼無需使用類名便可直接使用這些變量和方法,但是類的所以實(shí)例都共享相同的靜態(tài)值。由于類在任何地方都可使用(只要導(dǎo)入了類并將它聲明為public),因此類級(jí)變量與全局變量具有相同的作用。
實(shí)例級(jí)變量和方法
類還可以定每個(gè)類實(shí)例中的變量和方法。在開發(fā)過程中,大多數(shù)變量和方法都屬于該作用域
package{
????? public class ScopeTest{
public static var foo:String = "bar";
public var answer:Number = 42;
}
}
與靜態(tài)變量不同,實(shí)例變量對(duì)于類的各個(gè)實(shí)例都是相互獨(dú)立的
要訪問實(shí)例變量,可以使用實(shí)例名加點(diǎn)再加變量名,如下所示:
var myTest:ScopeTest = new ScopeTest();
trace(myTest.answer)
注意:實(shí)例本身被刪除時(shí),所有實(shí)例變量都將自動(dòng)從內(nèi)存中釋放,但是,如果其他對(duì)象引用了這些變量,則它們可以保留在內(nèi)存中。如果程序在內(nèi)存管理方面存在問題,那么刪除實(shí)例前最好先移除到類及其成員的所有引用。
函數(shù)級(jí)變量和函數(shù)
對(duì)象也可以在函數(shù)中定義,每個(gè)函數(shù)都將在運(yùn)行期間創(chuàng)建一個(gè)臨時(shí)的作用域。函數(shù)中定義的變量可用于暫時(shí)存儲(chǔ)值,并且將在函數(shù)運(yùn)行結(jié)束之后刪除。
package{
????? public class ScopeTest{
public static var foo:String = "bar";
public var answer:Number = 42;
public function showGreeting():void{
??? var message:String = "Hello ,world!";
???? trace(message);
}
}
}
var myTest:ScopeTest = new ScopeTest();
myTest.showGreeting();
trace(myTest.message);
(message變量的生存期只限于showGreetiong()函數(shù)的執(zhí)行期間)
函數(shù)中定義的變量只有在函數(shù)開始執(zhí)行后才可以使用。在類中定義的變量可以從函數(shù)內(nèi)部訪問,反過來則不行.
package{
??? public class Local{
???????? public var a:String = "instance";
???????? public var b:String = "instance";
???????? public function method():void{
????????????? var a:String = "function";
?????????????? b = "function";
??????????????? trace(a);
??????????????? trace(b);
}
}
}
對(duì)于a,函數(shù)自己定義了一個(gè)名為a的變量,它所定義的函數(shù)級(jí)變量將臨時(shí)覆蓋實(shí)例變量a。
而對(duì)于b,函數(shù)中使用的是實(shí)例變量(因?yàn)槲词褂胿ar關(guān)鍵字)并且被賦了新值function.
建議在引用與函數(shù)變量同名的實(shí)例變量時(shí)使用this關(guān)鍵字:
public function setFoo (foo:String):void{
this.foo = foo;
}
調(diào)用foo的實(shí)例變量將被覆蓋為傳遞到該方法中的值
使用作用域
通常,應(yīng)盡可能地將變量定義在較低的局部作用域中。局部變量更易于垃圾回收,因?yàn)榭梢詼p少開銷,但這并不意味著在任何情況下都可盲目地使用函數(shù)變量
XML注釋:<!--和-->,起始和結(jié)束標(biāo)記之間的內(nèi)容中不能包含--字符串
小結(jié):ActionScript以變量的使用為基礎(chǔ),而變量從本質(zhì)上說就是在程序運(yùn)行過程中保存數(shù)據(jù)的容器