zoukankan      html  css  js  c++  java
  • 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型类,也就是不能再被继承了。



    作者:Jingle Guo
    出处:http://www.cnblogs.com/studynote/
    若标题中有“转载”字样,则本文版权归原作者所有。若无转载字样,本文版权归作者所有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利.
  • 相关阅读:
    秦腾与教学评估【前缀和+二分】
    c++中成员函数声明时const得作用
    分形【递归】
    飞行兄弟【二进制枚举+异或】
    爬取4k图片网图片
    爬虫爬取博客园文章的文字【练手】
    【YBTOJ】求 f 函数
    【YBTOJ】划分数列
    【学习笔记】高斯消元法
    【Luogu P4588】 [TJOI2018]数学计算
  • 原文地址:https://www.cnblogs.com/studynote/p/2979662.html
Copyright © 2011-2022 走看看