FlashAS学习:构造函数小结

2008-04-02 10:44:05来源:互联网 阅读 ()

新老客户大回馈,云服务器低至5折


  一、构造函数的差别性

  构造函数是个特别的成员函数,和成员函数具备一起性和差别性。例如:构造函数和成员函数相同,通过function关键字来定义,能够声明为private或public,能够在构造函数中加入参数等。

  一、构造函数的差别性主要体现在:

  l构造函数名和类名必须相同,并且区分大小写;

  l构造函数不能声明为static,他只能是private或public;

  l构造函数中不能使用return语句返回一个值;

  l构造函数不能返回指定的数据类型;

  当违反以上规则时,flash会在输出面板提示相应的信息。

  1、在下面的Load类我们定义一个成员函数load:

  
classLoad{

  functionload(){

  }

  }


  进行语法检查时,flash会提示以下的信息:

  成员函数“load”和定义的类的名称“Load”大小写不同,在运行时将被视为类构造函数。

  2、假如我们在构造函数中声明了static属性:

  
classLoad{

  staticfunctionLoad(){

  }

  }


  flash将提示:

  允许用于构造函数的属性只有public和private

  3、假如我们在构造函数中使用了return语句返回一个值:

  
classLoad{

  vari=0;

  functionLoad(){

  returni;

  }

  }


  flash将提示:

  构造函数不能返回值

  4、假如我们在构造函数中返回了一个数据类型:

  
classLoad{

  functionLoad():Load{

  }

  }


  flash将提示:

  构造函数不能指定返回类型

  二、构造函数的返回值

  虽然在构造函数中不能用return返回一个值,但构造函数有返回值,他返回的是为该类的实例。

  如:

  
classLoad{

  functionLoad(){

  }

  functiontoString():String{

  return"Load类的实例";

  }

  }


  测试方法:

  
trace(newLoad());


  在输出面板中输出:

  Load类的实例

  在类中加入toString方法的原因:

  当Load类的对象作为字符串对待时,toString()方法会自动调用,这个方法在使用trace()调试类的属性、实例等时很有用,所以在有构造函数的类里面,一般都配有toString()方法,位置放在构造函数的后面。

  假如没有toString()方法,测试结果可不是我们想要:

  [objectObject]

  在创建类的实例时,一般都要指定一个实例名:

  vart:Load=newLoad();

  以上的代码的执行过程:

  l创建一个Load类的对象,并为该对象分配存储空间。

  l调用Load类的构造函数,初始化这个新建的对象。

  l声明一个Load类的实例的引用t即实例名,使其指向这个新的对象。

  通过实例名就能够使用实例属性和实例方法:

  实例名.属性

  实例名.方法名()

  三、构造函数的参数传递

  当用构造函数创造类的实例时,常常要初始化一些类的属性,这些属性通常用构造函数的参数来传递。

  
classToolTip{

  privatevar_str:DrawString;

  privatevar_shape:Shape;

  publicfunctionToolTip(str:DrawString,shape:Shape){

  _str=str;

  _shape=shape;

  }

  //配置和获取属性的代码

  }


  假如参数名和属性名相同,能够使用this关键字来指向类的实例,通过点语法把参数传递进来:

  
classToolTip{

  privatevarstr:DrawString;

  privatevarshape:Shape;

  publicfunctionToolTip(str:DrawString,shape:Shape){

  this.str=str;

  this.shape=shape;

  }

  }


  使用:

  
vart:ToolTip=newToolTip(str,rect);


  在构造函数的参数传递中,也存在着地址传递和数值传递的问题,这特别要引起注意。如下面两个参数不同传递方式的例子:

  地址传递:

  
classBox{

  functionBox(a:Array){

  a[0]=5;

  trace(a[0]);

  }

  }

  vara=["1"];

  vart:Box=newBox(a);

  trace(a[0]);

  //5

  //5


  数值传递:

  
classBox{

  functionBox(a){

  a=5;

  trace(a);

  }

  }

  vara=1

  vart:Box=newBox(a);

  trace(a);

  //5

  //1


  关于参数传递的原理可参考书

  在as2中,不支持构造函数的重载,即在一个类中定义多个构造函数,但能够通过条件语句进行模拟(实际上只有一个构造函数),通过对参数的判断如参数的类型的检查来执行不同的代码。在flash中,Array类的构造函数能够接受不同的参数,产生不同的实例,我想实现方法应和此类似。

  四、空构造函数和私有构造函数

  假如在一个类里含有一个空构造函数(默认是public的,见上面的第1个例子),意为这个类无需初始化,因为一个类的初始化代码一般都放在构造函数中。但空构造函数也有可能是个没有完成的构造函数,在编写其他类代码后,将会在构造函数中补充代码,这也是编程常用的方法。

标签:

版权申明:本站文章部分自网络,如有侵权,请联系:west999com@outlook.com
特别注意:本站所有转载文章言论不代表本站观点,本站所提供的摄影照片,插画,设计作品,如需使用,请与原作者联系,版权归原作者所有

上一篇: Flash音乐播放器可多曲连放 原文档

下一篇: 从Js调用一个AS方法