ActionScript编程 静态属性与作用域链
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
ActionScript编程静态属性与作用域链
虽然子类不继承基类的静态属性,但是静态属性却在基类或任何子类的作用域中。换句话说,静态属性在定义它们的类或任何子类的“作用域”中,因此,在定义静态属性的类体及该类的任何子类中都可以直接访问静态属性。
例如,修改上一节中的示例,以说明Class1类中定义的test静态属性在Class2类的作用域中。也就是说,Class2类可以访问test静态属性,而不必用定义test的类名作为变量的前缀,如下所示。
package{
import flash.display.MovieClip;
public class Example extends MovieClip{
public function Example(){
var myCla:Class2 = new Class2();
}
}
}
class Class1{
public static var test:String = "static";
}
class Class2 extends Class1{
public function Class2(){
trace(test); //输出:static
}
}
如果使用与同类或基类中的静态属性相同的名称定义实例属性,则实例属性在作用域链中的优先级比较高,因此可以这样认为,实例属性替代了静态属性,从而会使用实例属性的值,而不使用静态属性
的值。
例如,如果在Class2类定义名为test的实例属性,trace()语句将使用实例属性的值,而不使用静态属性的值,如下所示。
package{
import flash.display.MovieClip;
public class Example extends MovieClip{
public function Example(){
var myCla:Class2 = new Class2();
}
}
}
class Class1{
public static var test:String = "static";
}
class Class2 extends Class1{
public var test:String = "instance";
public function Class2(){
trace(test); //输出:instance
}
}