![Jeffrey Cross](https://cn.home-dream-solution.com/template/home-dream-solution/img/author.jpg)
在Actionscript 2.0中伪造常量
大多数人只需用所有大写字母命名成员变量并记住不改变它们的值,就可以解决Actionscript 2.0缺少常量变量的问题。这可行,假设您遵守规则,但如果您想强制执行常量值以便在运行时无法更改,该怎么办呢? Edgar De Loa今天写信给我们:
常量不是actionscript 2.0中固有的。最接近的是私有化,全局可访问。然而,这并没有改善这个问题,因为变量仍然可以很容易地改变,并且它的概念是不变的。
我发现了一种模拟常量的简单方法。环顾四周后,我发现没有其他人建议和/或使用过这种方法。
第一步是创建一个静态类,并使用想要存储的值定义一个私有变量。下一步是添加一个返回上述私有变量的公共函数。将函数命名为私有变量(全部为大写),是访问常量的一种简单方法。
static class ConstantVars {private var ARRAY_SIZE = 12;
公共函数ARRAY_SIZE(){return ARRAY_SIZE; }}
所以现在,可以使用ConstantVars.ARRAY_SIZE()来访问常量,无法更改或删除它。我还发现,将类命名为简单的类似于“Const”将使一切变得更加快速和简单。
这有效,但我认为我们甚至可以做得更好。
通过使用静态“getter”方法,您可以检索强制常量值,并且不需要使用函数的常规括号表示法来访问它。您可以在更全局的静态“Const”类中使用它,正如Edgar描述的更多全局变量。或者,您可以将静态常量封装在任何普通类中,如果常量与特定类(而不仅仅是全局const变量)相关,则非常方便。
例如,假设您有一个对用户进行身份验证的类。这不是一个静态的类。它有一些成员变量和一些处理用户身份验证和存储凭据的方法。它还有一些与身份验证过程相关的消息字符串,您可能希望这些消息字符串可供应用程序的其他部分使用,但您希望确保这些字符串是常量,并且在运行时不会意外更改:
public static function get SUCCESS_MSG():String {return“Login successful”; public static function get NOSUCHUSER_MSG():String {return“找不到用户”; public static function get SERVERERROR_MSG():String {return“连接服务器时出错”; } public function身份验证(服务器,用户名,密码){...} public function authenticate():String {//执行身份验证并返回一个常量错误字符串} ...} class Authentication {private var guid; private var username;私有密码;私有var服务器;
现在,Authentication类中的代码可以直接引用NOSUCHUSER_MSG,类外部的代码可以通过Authentication.SERVERERROR_MSG等简单方式访问常量值。在这种情况下,这可能非常有用,因为Authentication类可以传递成功/错误信息,外部类可以知道文本的含义,即使它在另一个翻译中被更改。另一个类可以执行以下操作来验证用户:
身份验证userauth = new身份验证(servername,user,pass); var result = userauth.authenticate(); if(result!= Authentication.SUCCESS_MSG){displayError(result); }
这是一个非常简单的例子 - 可能有一个更好的例子没有立即想到 - 但你明白了。使用const语法在Actionscript 3.0中支持实常量,但是如果您正在处理AS2项目,那么仍然有一个解决方案可以为您提供相同的效果。