访问控制属性:
public:公有属性
private:私有类型的变量和方法只允许定义它们的类访问,其他类访问报错,包括子类
internal:内部对象既不是公有类型也不是私有类型,与定义对象的类具有相同类包的类才可以访问,也就是说,拥有相同包声明(例如 package {...}的任何类都可以调用方法或访问变量)
protected:内部类型将访问权限限制为其他特定的类,而受保护类型与此类似,只有子类可以访问受保护类型的对象。
作用域:
全局作用域:根时间轴中或在函数和类外部定义的任何对象都属于全局作用域。(不提倡将对象定义在时间轴中)
局部作用域:根据对象的定义方式,局部访问(或子作用域)可分为几个不同的级别
类级(静态)变量和方法
这些对象存在于类级作用域中;换句话说,它们属于类本身,而不是类的实例,可以使用static关键字来定义这些对象
package{
public class ScopeTest{
public static var foo:String = "bar";
}
}
可以使用类名加对象名来访问这些对象。
trace(ScopeTest.foo);
在类中定义的代码无需使用类名便可直接使用这些变量和方法,但是类的所以实例都共享相同的静态值。由于类在任何地方都可使用(只要导入了类并将它声明为public),因此类级变量与全局变量具有相同的作用。
实例级变量和方法
类还可以定每个类实例中的变量和方法。在开发过程中,大多数变量和方法都属于该作用域
package{
public class ScopeTest{
public static var foo:String = "bar";
public var answer:Number = 42;
}
}
与静态变量不同,实例变量对于类的各个实例都是相互独立的
要访问实例变量,可以使用实例名加点再加变量名,如下所示:
var myTest:ScopeTest = new ScopeTest();
trace(myTest.answer)
注意:实例本身被删除时,所有实例变量都将自动从内存中释放,但是,如果其他对象引用了这些变量,则它们可以保留在内存中。如果程序在内存管理方面存在问题,那么删除实例前最好先移除到类及其成员的所有引用。
函数级变量和函数
对象也可以在函数中定义,每个函数都将在运行期间创建一个临时的作用域。函数中定义的变量可用于暂时存储值,并且将在函数运行结束之后删除。
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()函数的执行期间)
函数中定义的变量只有在函数开始执行后才可以使用。在类中定义的变量可以从函数内部访问,反过来则不行.
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);
}
}
}
对于a,函数自己定义了一个名为a的变量,它所定义的函数级变量将临时覆盖实例变量a。
而对于b,函数中使用的是实例变量(因为未使用var关键字)并且被赋了新值function.
建议在引用与函数变量同名的实例变量时使用this关键字:
public function setFoo (foo:String):void{
this.foo = foo;
}
调用foo的实例变量将被覆盖为传递到该方法中的值
使用作用域
通常,应尽可能地将变量定义在较低的局部作用域中。局部变量更易于垃圾回收,因为可以减少开销,但这并不意味着在任何情况下都可盲目地使用函数变量
XML注释:,起始和结束标记之间的内容中不能包含--字符串
小结:ActionScript以变量的使用为基础,而变量从本质上说就是在程序运行过程中保存数据的容器