'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
}
}
那是一个简单的类,其中public static var
存储了一个。当我这样实例化类时:
var hello:ClassA = new ClassA();
URL
已创建并设置为 Google 的 URL。现在,静态属性不属于对象,因此如果您尝试访问hello.URL
,它将失败。相反,它属于类定义。所以你以ClassA.URL
. 在 ClassA 的范围内,您可以通过ClassA.URL
或仅通过URL
. 一般静态对象用在两个地方:
- 实用类。
Math.PI
或者Math.max()
是很好的例子
- 需要保存单个实例的对象。我喜欢将它们用于用户系统,您只能在任何给定时间以单个用户身份登录。我通常有一个
User
我存储的对象username
等等accountType
。
静态对象有好有坏。对于将被实例化一千次并且值永远不会改变的类,它提供了显着的内存使用优势(而不是存储 15 字节 x 1000 或 1.5 KB,您只存储前 15 个字节)。但是,需要考虑范围问题和一般 OOP 标准。你会发现人们会争论直到他们脸色发青,静态对象和关联单例(阅读这些,它们与静态对象不同),永远不要使用,因为它违反了 OOP 原则。我将它用于 User 对象的示例是否应该是静态的值得商榷。有些人会认为它应该是单例(实际上我的最新项目使用了单例),有些人会认为它应该使用其他方法,有些人甚至会认为User
对象应该通过对象无限传递,以便它到达它需要的地方(这绝对是一场噩梦)。
实际上,请按您认为合适的方式使用它们。你是开发者。找出最适合项目以及您和您的团队的方法。
在此处阅读有关常量的信息,并在此处阅读有关AS3(以及大多数基于类的 OOP 语言)中访问修饰符的一般概述
Astatic const
提供了两者的好处。它是一个只存在一次并且只设置一次的对象,因此它提供了内存和处理时间的好处。它通常用于当您需要保存一个永远不会更改但需要多次访问的值时(如Math.PI
or MouseEvent.MOUSE_DOWN
)