AS3 (3) 对象

1.类属性

AS3中,可使用以下四个属性之一来修改类定义:
dynamic :允许在运行时向实例添加属性。
final :不得由其它类扩展。
internal :对当前包内的引用可见。
public :公共对所有位置的引用可见。

请注意,列表中未包含名为 abstract 的属性。这时因为 AS3不支持抽象类。

另外,该清单也未包含名为 private 和protected 的属性。这些属性只在类定义中有意义,但不可以应用于类本身。why?

如果不希望某个类在包以外公开可见,请将该类放在包中,并用 internal 属性标记该类。或者,可以省略属性。

如果不希望某个类在定义该类的源文件以外可见,请将类放在包定义右大括号下面的源文件底部。

2.类体

可以在类体中定义命名空间:

public class SampleClass
{
    public namespace sampleNamespace;
    sampleNamespace function doSomething():void;
}

AS3不但允许在类体中包括定义,而且还允许包括语句。这些语句只在第一次遇到类定义并且创建了相关的类对象时执行一次。

package  
{
    public class SampleClass2
    {
        SampleClass();
        trace("class created");
        
        static function SampleClass():void
        {
            trace("SampleClass created");            
        }
    }
}
            var tem2:SampleClass2=new SampleClass2();
            var tem3:SampleClass2=new SampleClass2();
//            输出:            
//            SampleClass created
//            class created

AS3中允许在同一类体中定义同名的静态属性和实例属性。

class StaticTest
{
    static var message:String = "static variable";
    var message:String = "instance variable";
}
// In your script
var myST:StaticTest = new StaticTest();
trace(StaticTest.message); // output: static variable
trace(myST.message); // output: instance variable

3.属性修饰符
internal (默认) 对同一包中的引用可见。
private 对同一类中的引用可见。
protected 对同一类及派生类中的引用可见。
public 对所有位置的引用可见。
static 指定某一属性属于该类,而不属于该类的实例。
UserDefinedNamespace 用户定义的自定义命名空间名。

在使用 dynamic 属性声明的类中尝试访问私有变量时,不会导致运行时错误。只是变量不可见,所以返回值 undefined。

protected 属性类似于 Java 中的 protected 属性,不同之处在于,Java 中的该属性还允许对同一包中的调用方进行访问。

4.绑定方法
绑定方法有时也叫做闭包方法,就是从它的实例提取的方法。作为参数传递给函数的方法或作为值从函数返回的方法都是绑定方法。

绑定方法中的 this 引用总是指向实现方法的原始对象。对于闭包函数, this 引用是通用的,该引用指向与函数关联的任何对象。

class ThisTest
{
    private var num:Number = 3;
    function foo():void // bound method defined
    {
        trace("foo's this: " + this);
        trace("num: " + num);
    }
    function bar():Function
    {
        return foo; // bound method returned
    }
}
var myTest:ThisTest = new ThisTest();
var myFunc:Function = myTest.bar();
trace(this); // output: [object global]
myFunc();
/* output:foo's this: [object ThisTest]
output: num: 3 */

5.嵌入资源

嵌入资源 指的编译时包括在 SWF 文件中的资源,如声音、图像或字体。嵌入资源而不是动态加载资源,可以确保资源在运行时可用,但代价是增加了 SWF 文件的大小。

要嵌入资源,首先将该资源放入 FLA 文件的库中。接着,使用资源的链接属性,提供资源的嵌入资源类的名称。如果无法在类路径中找到具有该名称的类,则将自动生成一个类。然后,可以创建嵌入资源类的实例,并使用任何由该类定义或继承的属性和方法。

原文地址:https://www.cnblogs.com/jinc/p/2465002.html