ActionScript 3(AS 3)クラスライブラリ学習の(一)——Object基本オブジェクト

6608 ワード

Object classはすべてのクラスのベースクラスであり、継承が明記されていないすべてのclassは、number、stringなどの基本タイプがObjectクラスからデフォルトで継承されます.さらにprototype,Class,FunctionなどのクラスはObjectクラスから継承されているが,これらのクラスはObjectクラスから継承されているが,一般的なクラスとして扱うことはできない.一.Objectの作成は、キーワードnewを使用してObjectインスタンスを作成し、動的に値を割り当てることができます.
var obj:Object = new Object();

obj.a = "foo";

obj["b"] = "bar";

trace(obj.a);

trace(obj.b);


同時にObjectインスタンスは以下のように作成できます.
var obj:Object = {a:"foo", b:"bar"}

trace(obj.a);

trace(obj.b);


クラスがdynamicとして宣言されると、動的に値を割り当てることができます.そうしないと、動的に値を割り当てることはできません.
public class A

{

  public function A()

  {        

  }

}

var obj:A = new A();

obj.a = "foo"; //error

obj.b = "bar"; //error

public dynamic class A

{

  public function A()

  {        

  }

}

var obj:A = new A();

obj.a = "foo";//right

obj.b = "bar";//right

trace(obj.a);

trace(obj.b);


二.prototypeのクラスを使用するprototypeオブジェクトは、クラスのすべてのオブジェクトがこの値を共有するメカニズムを提供するオブジェクトの特殊なオブジェクトです.コンパイラの場合、クラスのインスタンスに属性が見つからない場合、コンパイラはエージェント(つまりクラスのprototypeオブジェクト)から属性を探します.そのprototypeにその属性が含まれていない場合、コンパイラはより高いレベルのクラスのprototypeオブジェクトからその属性を探し続けます.prototypeとclassの継承とアクセスには、次の特性があります.1.class独自の属性とメソッドはstaticと宣言されたときにクラスでのみ使用でき、オブジェクトでは使用できず、継承はサポートされていません.2.class独自の属性とメソッドはstaticと宣言しない場合にオブジェクトにのみ使用され、クラスによって使用されず、継承をサポートし、属性は再定義されず、メソッドが再定義される場合はoverrideを追加する必要があります.3.prototypeのプロパティとメソッドはクラスでもオブジェクトでも使用でき、継承をサポートします.オブジェクトによって使用される場合、クラスはdynamicとして定義する必要があります.そうしないと、オブジェクトによって使用できません.クラスで使用する場合はclassが必要です.prototype.propertyの形式では直接使用できません.
    public dynamic class A

    {

        public var x:String = "x in A";

        public static var staticx:String = "staticx in A";

        prototype.px = "px in A";

        prototype.py = "py only in A";

        public function A()

        {

        }

        public function toLocaleString():String {

            return "a locale string in A";

        }

        public static function staticFunc():String

        {

            return "a static function in A";

        }

        public function thefunc():String

        {

            return "a func in A";

        }

    }

    public dynamic class B extends A

    {

        var x:String = "x in B"; //cannot redefine

        public static var staticx:String = "staticx in B";

        prototype.px = "px in B";

        public function B()

        {        

        }

        public function toString():String {

            return "a string in B";

        }

        public static function staticFunc():String

        {

            return "a static function in B";

        }

        public override function thefunc():String

        {

            return "a func in B";

        }

    }

            var ma:A = new A();

            var mb:B = new B();

            

            trace(A.staticx);

            trace(B.staticx);

            trace(ma.staticx); //undefined

            trace(A.staticFunc());

            trace(B.staticFunc());

            trace(ma.staticFunc());  //error

            

            trace(A.x); //error

            trace(ma.x);

            trace(mb.x);

            trace(ma.thefunc());

            trace(mb.thefunc());

            

            trace(ma.px);

            trace(mb.px);

            trace(mb.py);

            trace(A.prototype.px);

            trace(B.prototype.px);

            trace(B.prototype.py);

            

            trace(ma.toLocaleString());

            trace(mb.toLocaleString());

            trace(ma.toString());

            trace(mb.toString());

            trace(A.prototype.toString());

            trace(B.prototype.toString());


三.Objectのいくつかの属性およびメソッドは、共有属性constructor:ObjectがObject classまたはObjectインスタンスを指すコンストラクタprototype:Object[static]がObject ClassまたはFunction Objectを指すプロトタイプ(prototype)共通メソッドObject()がObjectインスタンスを作成し、そのインスタンスのconstructor propertyがコンストラクタを指すことを示します.hasOwnProperty(name:String):Booleanはこの名前のpropertyがあるかどうかを判断し、静的属性とメソッドとprototypeで得られた属性またはメソッドはfalseisPrototypeOf(theClass:Object):Boolean指定されたオブジェクトのプロトタイプチェーン内のオブジェクトがpropertyIsEnumerable(name:String):Boolean指定された属性が存在するかどうかを判断し、toLocaleString()を列挙できるかどうかを判断します.Stringは、オブジェクトを表すlocale-specific conventions文字列toString()を返します.:Stringは、オブジェクトを表す文字列valueOf()を返します.Objectは、オブジェクトの元の値4を返します.クラスクラスクラスクラスクラスクラスクラスクラスクラスクラスクラスクラスクラスクラスクラスクラスクラスクラスクラスクラスクラスクラスクラスクラスクラスクラスクラスクラスクラスクラスクラスクラスクラスクラスクラスクラスクラスクラスクラスクラスクラスクラスクラスクラスクラスクラスクラスクラスクラスクラスクラスクラスクラスクラスクラスクラスクラスクラスクラスクラスクラスクラスクラスクラスクラスクラスクラスクラスクラスクラスクラスクラスクラスクラスクラスクラスクラスクラスクラスクラスクラスクラスクラスクラスクラスクラス
    public dynamic class A

    {

        public function A()

        {

        }

        public function toString():String

        {

            return "A class"

        }

    }

    public dynamic class B

    {

        public function B()

        {

        }

        public function toString():String

        {

            return "B class"

        }

    }

        var cls:Object = { "A":A as Class, "B":B as Class };

        public function CreateClass(type:String)

        {

            var myclass:Class = cls[type];

            return new myclass();

        }

            var newobj = CreateClass("A");

            trace(newobj.toString());


五.FunctionクラスFunctionクラスはObjectから継承されています.特殊なクラスです.callとapplyの2つの方法があります.この2つの方法の基本的な機能は同じです.違いはapplyで関数のすべてのパラメータを配列の形で入力しますが、callはカンマで区切って入力します.functionを使用すると、より柔軟なコードを実現できます.次の例です.
    public dynamic class A

    {

        var ininum:int = 0;

        public function A()

        {

        }

    }

            var arr:Array = new Array(1, 2, 3);

            var obj:Object = new Object();

            obj.sumup = function(num1:int,num2:int,num3:int):int

            {

                return this.ininum + num1 + num2 + num3;

            }

            var sum1:A = new A();

            var sum2:A = new A();

            sum2.ininum = 100;

            trace(obj.sumup.apply(sum1, arr));

            trace(obj.sumup.call(sum1, 1, 2, 3));

            trace(obj.sumup.apply(sum2, arr));


六.いくつかの基本クラスint,uint,numberはObjectから継承され、数字を表示するための3種類があります.これらは主にtoExponential(指数形式に変換)、toFixed(幅を指定)、toPrecision(精度を指定)の3つの関数Stringを実現し、文字列Booleanを表示して時間Mathを処理して計算するために使用されます.このクラスはオブジェクトを構築できません.すべての操作は、オブジェクトではなくクラスに基づいて行われます.これらの組み込みクラスはすべて値に従って伝達され、final型クラスとして宣言され、つまり継承されません.