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型类,也就是不能再被继承了。

你可能感兴趣的:(actionscript)