选择显示字体大小

谈谈flash的一些语法基础和系统核心 2.3 object :引用一个幽灵

2.3 object :引用 —— 一个幽灵
java类似,flash里面的另外一类变量就是引用。 你也许很熟悉c里面的结构或者c++里面的类。我们定义一个struct ,它拥有自己的成员属性,比如name、pos等等。对于类c的构架来说,一个结构体就像一块石头,他的每个成员都是固定的,你甚至有办法知道他在你的虚拟空间中的地址和大小。这种确定性带来了安全和灾难。
它是定制的,定制的东西就是简单的,可以避免很多小错误;
然而定制的东西是不同用的,你需要通用性的时候灾难就出现了:比如,如果你要实现一个通用堆栈……可是不同的对象类型不同,int型堆栈只能用于int,student堆栈只能用于student……你就需要使用模板、虚函数多态等等一大堆咚咚
其他的灾难比如饱受指责的内存管理什么的就不说了。
object是一个很有意思的东西,他和c /c++的复杂类构架的区别在于:他是一个幽灵。
我们可以这样创建一个object:
{} 或者 new object(); 他们在语法上是等价的。 那么这个object在什么地方呢?没有人知道。我说过,他是一个幽灵。
如果你直接写一个object,但是不把它赋值给任何变量,那么你创建了一个“匿名对象”,但是谁也得不到他:
{}; //创建一个空的匿名object
new color( this ); //创建一个匿名的color对象,初始化参数为this 你可以在很多地方使用匿名object,你召唤并且使用他,然后他就消失了,比如 : new color( this ).setrgb(0xff0000); //当前mc变成全红 你可以用一个变量抓住他很长时间,直到这个变量用于抓住或者装另外的东西:
var a= new object(); 这样,这个变量仿佛就是 我们建立的object一样,但是这只是一个假象。
我们控制了这个object吗? ——是的,你看,我们可以操作这个object:
a={}
a.hp = 100;
trace(a.hp)
a. littleobject= {}; //在a下面建立一个新的object
a. littleobject. x =10;
a. littleobject. y =20;
trace(a.littleobject + " x:"+ a.littleobject.x + " y:" +a.littleobject.y);
输出: 100
[object object] x:10 y:20 和flash的其他特性一样,一个object可以装下任何东西,没有任何母版的限制。但是你却无法真正获得它:你无法杀死他。
接着上面的代码,加上:
delete(a);
trace(a);
trace(a.hp);
噢,出现的结果是:
undefined
undefined a被删除了,不是吗?
不是的。你删除的只是抓住a的变量。如果你同时用b抓住那个object,你会发现,那个object其实还是漂浮在某处~~~~
a={} //a引用一个新建立的object
b=a; //b也引用同一个object
a. xx =10;
trace("before delete a, a.xx:" + a.xx + " b.xx:" + b.xx);
delete(a);
trace("after delete a, a:" +a + " b.xx:" +b.xx)
//---------------------------------------------------------------------------------------------- before delete a, a.xx:10 b.xx:10
after delete a, a:undefined b.xx:10 你看,被删掉的只是他的一个名字……只要仍然有变量能够访问他,他就永远存在…… 那么那个幽灵什么时候消失呢?谁也不知道。在所有人都遗忘了他之后,当没有一个活动变量引用他的时候,可怕的~~~~ 垃圾处理器~~~~ 会自动删掉他的~~~~ 然而,他是什么时候被删掉的? 谁也不知道……
链表的实现片断
好嘛,记住,你的变量名只是“抓住”了幽灵而已,它不会产生和消除实例。知道了这些,你就可以实现你的链表了~~~
比如这些操作片断:
nodenow.next = {}; //建立新的node
nodenow = nodenow.next;
nodenow.data = newdata; //删除nodenow.next的方法
nodenow.next = nodenow.next.next; //注意,不需要删除 nodenow.next,也不需要知道nodenow.next.next是否存在 //遍历
var nodenow = nodehead;
while(nodenow !=null){
dosomething();
nodenow = nodenow.next;
} 但是你真的需要链表吗? 在2.5 和2.6 你会明白,flash已经拥有更好的东西了。   


 


关键字 本文所属关键字

相关 与本文相关文章

分类 所有文章关键字导航

源码编程相关

Java   Asp   PHP   .Net   XML   C/C++   CGI   VB   Jsp   J2ee   J2se   J2me   EJB   Servlet   Tomcat   Resin   Struts   Weblogic   Eclipse   ANT   GUI   JMS   Web servise   IDEA   Webphere   Hibernate   Spring   Jboss   Applet   Swing   Socket   Javamail   Perl   Ajax   P2P   安全   模式   框架   测试   开源   游戏

SQL数据库相关

My-SQL   Ms-SQL   Access   DB2   Oracle   Sybase   SQLserver   索引   存储过程   加密   数据库   分页   视图  

手机无线相关

3G   Wap   CDMA   GRPS   GSM   IVR   彩信   短信   无线   增值业务

网页设计制作相关

HTML   CSS   网页配色   网页特效   Javascript   VBscript   Dreamweaver   Frontpage   JS   Web   网站设计

网站建设推广相关

建站经验   网站优化   网站排名   推广   Alexa

操作系统/服务器相关

Windows XP   Windows 2000   Windows 2003   Windows Me   Windows 9.x   Linux   UNIX   注册表   操作系统   服务器   应用服务器

图形图像多媒体相关

Photoshop   Fireworks   Flash   Coreldraw   Illustrator   Freehand   Photoimpact   多媒体   图形图像

标准 网站致力的规范

Valid CSS!

无不良内容,无不良广告,无恶意代码

Valid XHTML 1.0 Transitional

creativecommons