| 《Flash ActionScript 2.0-RIA应用程式开发》静态-概念与例子 |
|
《Flash ActionScript 2.0-RIA应用程式开发》静态-概念与例子 |
| 作者:佚名 来源:闪吧 作者: hiphen 更新:2007-1-13 21:01:06 错误报告 我要投稿 |
注:以下引用出自<Flash ActionScript 2.0-RIA应用程式开发>,引用已得到本书作者:Luar的允许.
出自:http://www.cnflash.org/guohaifeng/blogview.asp?logID=18
对一个成员除了可以指明是私有或公有外,更可以指明它是否静态. 静态成员只存于类中,不会存于实体中,由于类只有一个,所以静态成员可以成为一个给所有实体共用的数据地方.假设有一个Ball类,所有球的实体都是受地心吸力影响,如果每个实体都记录了地心吸力属性gravity=9.8,只是浪费内存.不如将属性gravity设定为静态,放在类里,统一给所有实体共用. 注意: 当静态属性被改变了,所有实体都受影响,例如其中一个实体通过其方法将属性gravity改为23.128(或者类中属性gravity被直接修改),所有球的实体便变成了处于木星,受了木星地心吸力影响. 属性和方法都可以设定为静态,只要在”private/publie”后加上”static”这关键字. 例如,建立Ball类,代码如下:
以下内容为程序代码:
class Ball { public static var gravity:Number=9.8; private static var ballno:Number=0; function Ball() { ballno++; } } | 新建一个Ball.fla文件,加入下面的代码,建立一个球的实体:
| 以下内容为程序代码:
myBall1 =new Ball(); trace(myBall1.gravity); //undefined
| 结果是undefined,虽然属性gravity是公有成员,但它是静态,只存于类,不存于属性,所以找不到它.
如果在Ball类加入隐含get方法:
以下内容为程序代码:
public function get _g():Number { return gravity; } | 在Ball.fla文件,加入代码:
以下内容为程序代码:
trace(myBall1._g); //9.8 | 结果是9.8,说明静态成员是经实体共用,但又不存于实体中.
如果在Ball类(Ball.as)加入隐含set方法:
以下内容为程序代码:
public function set _g(n:Number):Void { gravity=n; } | 在Ball.fla文件,再建立一个球的实体,并修改地心吸力为12:
以下内容为程序代码:
myBall2=new Ball(); myBall2._g=12; trace(myBall1._g); //12 trace(myBall2._g); //12 | 结果不单是myBall2的地心引力变了,连myBall1的地心吸力都变了,因为所有实体是共用同一个属性gravity. |
|
|
| 文章录入:skyuu 责任编辑:skyuu |
|
| 【字体:小 大】【发表评论】【加入收藏】【告诉好友】【打印此文】【关闭窗口】 |