ActionScript3(AS3)類庫學習之(一)——Object基本對象


Object class 是所有類的基類,所有未申明繼承的class都被默認的繼承自Object 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得到的屬性或方法會返回false
isPrototypeOf(theClass:Object):Boolean
判斷一個對象是否在指定的對象的原型鏈中
propertyIsEnumerable(name:String):Boolean
判斷一個指定的屬性是否存在並是否可列舉
toLocaleString():String
返回一個代表該對象的locale-specific conventions字符串
toString() :String
返回一個代表該對象的字符串
valueOf():Object
返回對象的原始值

四.Class類
Class繼承自Object,是一個特殊的類,用Class類可以實現更靈活的代碼,如下例:

    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兩個方法,這兩個方法的基本功能是一樣的,區別就在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,用來顯示數字的三種類:
它們主要實現了toExponential(轉為指數形式),toFixed(指定寬度),toPrecision(指定精確度)這三個函數
String用來顯示字符串
Boolean用來判斷是非等
Date用來處理時間
Math用來做計算,這個類不能構建對象,所有的操作都是基於類而不是對象進行的。
這些內置類都是按照值傳遞的,且被聲明為final型類,也就是不能再被繼承了。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM