Actionscript 3 静态公共持续行动脚本3良好实践
我不知道静态公共常量在ActionScript3中是如何工作的 是否每次使用时都会计算常量值 这里有一个例子:Actionscript 3 静态公共持续行动脚本3良好实践,actionscript-3,constants,Actionscript 3,Constants,我不知道静态公共常量在ActionScript3中是如何工作的 是否每次使用时都会计算常量值 这里有一个例子: public static const DIAMETER:Number = 100; 那么如果我像这样设置这个常数 public static const RADIUS:Number = DIAMETER /2; 我不知道是否每次使用这个常数时都会计算出结果 我需要一些关于它的信息 同一个问题与常量对象类型有关: public static const MY_POINT:Point
public static const DIAMETER:Number = 100;
那么如果我像这样设置这个常数
public static const RADIUS:Number = DIAMETER /2;
我不知道是否每次使用这个常数时都会计算出结果
我需要一些关于它的信息
同一个问题与常量对象类型有关:
public static const MY_POINT:Point = new Point(100,100);
谢谢;)
常数就是常数。这意味着它不会改变,因为它是恒定的。常量背后的思想是,可以确保其值在运行时不会更改。如果尝试将新值赋给常数,将出现如下错误:
1049:对指定为常量的变量的非法赋值。
在您的示例中,半径
不会重新计算。事实上,当您访问任何变量时都不会发生这种行为,除非您是通过需要在返回结果之前计算结果的getter访问它。例如,返回两点之间距离的getter
在最后一个示例中,将点
指定给常数。这与您预期的行为稍有不同。您不能做的是继续并将一个新点指定给MY\u点
。但是,您可以修改该点的值。例如,您将能够执行以下操作:
MY_POINT.x = 10;
常量最适合存储基元类型(int、uint、Number、Boolean、String)。在这种情况下,最好创建单独的常量来存储点的x
和y
,而不创建点:
const POINT_X:int = 10;
const POINT_Y:int = 15;
static
修饰符实际上与常量无关,它是一个单独的关键字,用于将定义的属性或方法添加到类定义中,而不是该类的实例中。因为常量是有状态的且不会更改,所以没有理由将常量附加到类的每个实例
在处理基本数据时,常量对于增加可读性和安全性非常有用。这些常量可以存储为充当相关常量集合的类的静态成员,也可以存储为将这些常量用作其方法参数的类的静态成员
Event
类就是一个很好的例子,它将原始数据(字符串)存储为静态常量,以表示不同的事件类型,例如Event.ACTIVATE
。当使用预期事件类型的方法时,例如addEventListener()
,我们可以引用该常量,而不是原语“activate”
。这可以保护我们免受错误的影响,因为原语允许拼写错误-如果您在访问常量时输入错误,您将收到编译时错误。a“constant”(const
)是一个只能设置一次的对象,必须在对象声明附近(通常立即)设置。所以你不能这么做:
const val:String;
... 5 minutes later ...
val = 'hello world'
相反,您必须执行以下操作:
const val:String = 'hello world';
从文档中可以看出,您可以稍后再进行设置,但似乎没有预定义的时间或顺序可以进行设置。你最好像我上面所说的那样马上去做。如果您在“严格模式”下编译,它必须像我上面所做的那样设置
常数适用于处理时间。因为它是一个固定值,所以运行时可以以不同的方式以更高效的方式存储它。我记不清具体细节,但const在对象访问时间方面比标准变量有了实质性的改进
static
是一个访问修饰符,就像private
或public
一样(还有很多其他修饰符,我建议您阅读所有修饰符)。静态对象只存在一次。每次实例化/访问标准对象的类时,都会声明标准对象。静态对象仅在第一次声明。因此,考虑下面的
public class ClassA {
public static var URL:String = "http://google.com";
public function ClassA(){
//hello world
}
}
这是一个简单的类,其中存储了公共静态var
。当我实例化该类时,如下所示:
var hello:ClassA = new ClassA();
URL
被创建并设置为谷歌的URL。现在,静态属性不属于对象,因此如果尝试访问hello.URL
,它将失败。相反,它属于类定义。因此,您可以通过ClassA.URL
访问它。在ClassA的范围内,您可以通过ClassA.URL
或仅通过URL
访问它。通常,静态对象用于两个位置:
Math.PI
或Math.max()
User
对象,我在其中存储username
和accountType
等等李>
静态对象既是好的也是坏的。对于一个将被实例化一千次且值永远不会更改的类,它提供了巨大的内存使用优势(而不是存储15字节x1000或1.5kB,只存储前15个字节)。然而,有范围的问题和一般的OOP标准要考虑。你会发现有些人会争论到他们脸色发青,他们认为静态对象和关联单例(仔细阅读,它们与静态对象不同)不应该被使用,因为这违反了OOP原则。我用它作为用户对象的例子是有争议的,它是否应该是静态的。有些人会认为它应该是一个单例(实际上,我最近的项目使用了单例),有些人会认为它应该使用其他方法,有些人甚至会认为User
对象应该无限地通过对象,以便它到达它需要的地方(这绝对是一场噩梦)
实际上,只要你觉得合适就使用它们。你是德维