Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/actionscript-3/7.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Actionscript 3 静态公共持续行动脚本3良好实践_Actionscript 3_Constants - Fatal编程技术网

Actionscript 3 静态公共持续行动脚本3良好实践

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

我不知道静态公共常量在ActionScript3中是如何工作的

是否每次使用时都会计算常量值

这里有一个例子:

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
访问它。通常,静态对象用于两个位置:

  • Util类
    Math.PI
    Math.max()
  • 需要保存单个实例的对象。我喜欢在用户系统中使用它们,在这些系统中,您只能在任何给定的时间以单个用户的身份登录。我通常有一个
    User
    对象,我在其中存储
    username
    accountType
    等等 静态对象既是好的也是坏的。对于一个将被实例化一千次且值永远不会更改的类,它提供了巨大的内存使用优势(而不是存储15字节x1000或1.5kB,只存储前15个字节)。然而,有范围的问题和一般的OOP标准要考虑。你会发现有些人会争论到他们脸色发青,他们认为静态对象和关联单例(仔细阅读,它们与静态对象不同)不应该被使用,因为这违反了OOP原则。我用它作为用户对象的例子是有争议的,它是否应该是静态的。有些人会认为它应该是一个单例(实际上,我最近的项目使用了单例),有些人会认为它应该使用其他方法,有些人甚至会认为
    User
    对象应该无限地通过对象,以便它到达它需要的地方(这绝对是一场噩梦)

    实际上,只要你觉得合适就使用它们。你是德维