毕业论文 论文提纲 论文写作 公文范例 教育论文 教育学论文 师范教育 学术论文     论文指导*
                     
 
   
   
   
   
           
 

当前位置:课件115学培吧(kj115.com)→flash网侠教程(助你成为顶尖课件高手)→系列文章

 
 
标题:Flash AS学习构造函数小结
 
展示台

文章来源 作者:admin 密码:admin 整理:湖北金鹰

◇网侠教程栏目简介
    提供FLASH侠客教程和网页制作侠客教程,高手进阶教程。
    浏览过这些资源的还浏览过经典教程图文教程游戏开发教程等相关资源。

---------------

湖北金鹰课件吧

论文相关服务
 

 

一、构造函数的差别性
构造函数是一个特殊的成员函数,与成员函数具有共同性和差别性。例如:构造函数与成员函数一样,通过function关键字来定义,可以声明为private或public,可以在构造函数中加入参数等。
一、构造函数的差别性主要体现在:
l 构造函数名与类名必须相同,并且区分大小写;
l 构造函数不能声明为static,它只能是private或public;
l 构造函数中不能使用return语句返回一个值;
l 构造函数不能返回指定的数据类型;
当违反以上规则时,flash会在输出面板提示相应的信息。
1、在下面的Load类我们定义一个成员函数load:
class Load {
function load() {
}
}
进行语法检查时,flash会提示以下的信息:
成员函数“load”与定义的类的名称“Load”大小写不同,在运行时将被视为类构造函数。
2、如果我们在构造函数中声明了static属性:
class Load {
static function Load() {
}
}
flash将提示:
允许用于构造函数的属性只有 public 和 private
3、如果我们在构造函数中使用了return语句返回一个值:
class Load {
var i = 0;
function Load() {
return i;
}
}
flash将提示:
构造函数不能返回值
4、如果我们在构造函数中返回了一个数据类型:
class Load {
function Load():Load {
}
}
flash将提示:
构造函数不能指定返回类型
二、构造函数的返回值
虽然在构造函数中不能用return返回一个值,但构造函数有返回值,它返回的是为该类的实例。
如:
class Load {
function Load() {
}
function toString():String {
return "Load类的实例";
}
}
测试方法:
trace(new Load());
在输出面板中输出:
Load类的实例
在类中加入toString方法的原因:
当Load类的对象作为字符串对待时,toString()方法会自动调用,这个方法在使用trace()调试类的属性、实例等时非常有用,所以在有构造函数的类里面,一般都配有toString()方法,位置放在构造函数的后面。
如果没有toString()方法,测试结果可不是我们想要:
[object Object]
在创建类的实例时,一般都要指定一个实例名:
var t:Load = new Load();
以上的代码的执行过程:
l 创建一个Load类的对象,并为该对象分配存储空间。
l 调用Load类的构造函数,初始化这个新建的对象。
l 声明一个Load类的实例的引用t即实例名,使其指向这个新的对象。
通过实例名就可以使用实例属性和实例方法:
实例名.属性
实例名.方法名()
三、构造函数的参数传递
当用构造函数创造类的实例时,常常要初始化一些类的属性,这些属性通常用构造函数的参数来传递。
class ToolTip {
private var _str:DrawString;
private var _shape:Shape;
public function ToolTip(str:DrawString, shape:Shape) {
_str = str;
_shape = shape;
}
//设置和获取属性的代码
}
如果参数名与属性名相同,可以使用this关键字来指向类的实例,通过点语法把参数传递进来:
class ToolTip {
private var str:DrawString;
private var shape:Shape;
public function ToolTip(str:DrawString, shape:Shape) {
this.str = str;
this.shape = shape;
}
}
使用:
var t:ToolTip=new ToolTip(str, rect);
在构造函数的参数传递中,也存在着地址传递和数值传递的问题,这特别要引起注意。如下面两个参数不同传递方式的例子:
地址传递:
class Box {
function Box(a:Array) {
a[0] = 5;
trace(a[0]);
}
}
var a = ["1"];
var t:Box = new Box(a);
trace(a[0]);
//5
//5
数值传递:
class Box {
function Box(a) {
a = 5;
trace(a);
}
}
var a = 1
var t:Box = new Box(a);
trace(a);
//5
//1
关于参数传递的原理可参考书
在as2中,不支持构造函数的重载,即在一个类中定义多个构造函数,但可以通过条件语句进行模拟(实际上只有一个构造函数),通过对参数的判断如参数的类型的检查来执行不同的代码。在flash中,Array类的构造函数可以接受不同的参数,产生不同的实例,我想实现方法应与此类似。
四、空构造函数和私有构造函数
如果在一个类里含有一个空构造函数(默认是public的,见上面的第1个例子),意为这个类不需要初始化,因为一个类的初始化代码一般都放在构造函数中。但空构造函数也有可能是一个没有完成的构造函数,在编写其它类代码后,将会在构造函数中补充代码,这也是编程常用的方法。
在一个类里面,如果没有定义构造函数,as2会创建一个空构造函数,所以一个空构造函数在as2里意义不大,但如果一个空构造函数被声明为private,它就具有重大的意义。
1、抽象类中的私有构造函数
首先私有构造函数能保证不能在外部通过new关键字被实例化,因为抽象类被实例化是没有意义的。在抽象类里面,一般定义了子类所需的统一方法,而抽象类本身只做为一个统一的数据类型使用,它的实例化都要延迟到子类。
例如:在flash的绘图中,颜色填充的方式有三种:固体填充、直线渐变填充和放射渐变填充。如果我们要写一个填充类,最好的方法是先创建一个抽象类,让三种具体的填充类来继承这个抽象类,这样,三个具体类就具有了相同的数据类型和统一的接口方法。
下面是代码示例:
//抽象类
class Brush {
private function Brush() {
}
public function fill(target:MovieClip) {
}
}
//固体填充类
class SolidBrush extends Brush {
function SolidBrush(color, alpha) {
}
public function fill(target:MovieClip) {
}
}
//直线渐变填充类
class LinerBrush extends Brush {
function LinerBrush(参数) {
}
public function fill(target:MovieClip) {
}
}
使用可把实例名的类型定义为Bursh,但具体的实例可以是三个里面的任意一个:
var b:Brush=new SolidBrush();
b.fill();
//
var b:Brush=new LinerBrush ();
b.fill();
2、具体类中的私有构造函数
这种情况最常见的是在单例模式中,在单例模式中,一个类只能自己创建一个唯一的实例。如下面是一个代码示例:
class Load {
private static var _instance:Load;
private function Load() {
}
public static function getInstance():Load {
if (Load._instance == undefined) {
return Load._instance=new Load();
}
}
}
使用:
var t:Load=Load.getInstance()

 

 
课件115学培吧(湖北金鹰)欢迎您!永久免费服务网址:http://www.kj115.com
   
 

学员众多的FLASH课件学习基地,成万免费FLASH课件制作教程在线学习,还有免费内容课件教程、视频教程、课件技巧、课件探讨、课件欣赏、课件展示、实用教程、课件界面、课件脚本、课件游戏、课件下载、课件封面、课文内容图片、课文人物图片库、课件素材、图片素材、声音素材、动物素材、背景图片、背景资料、背景边框、课件顶栏图片素材、Dreamweaver教程、Dreamweaver网页课件教程、软件下载。承接学习和培训,承接课件订制,课件修改等所有课件相关服务。
本站主要业务:┃flash课件制作视频教程培训┃承接全国竞赛flash课件┃论文代写代发┃代办课件国家级获奖证书┃
联系:QQ:444860709 手机:13339817386


 
 

业务办理
鄂ICP备08005724号