AS3使用字符串定位控制器类变量

时间:2016-07-07 08:49:28

标签: class actionscript-3 actionscript

我正在寻找一种方法来压缩我的一些AS3代码,以避免几乎重复的命令。

问题在于我有多个具有几乎相同名称的变量,例如frenchLanguage,englishLanguage,germanLanguage,spanishLanguage

我的Controller类包含公共静态变量(这些变量可以在多个类中访问),我需要一种能够动态调用其中一些变量的方法。如果变量在您调用它们的类中,则可以执行此操作以动态访问它们:

this["spanish"+"Language"]

在AS3中,不可能写出如下内容:

Controller.this["spanish"+"Language"]

有没有办法实现这个目标?虽然一切正常,但我希望能够尽可能减少代码。

2 个答案:

答案 0 :(得分:0)

可以通过这种方式访问​​类的public static属性(假设类名是Controller,如示例所示:

Controller['propertyName']

我不确定这对于“最小代码”有什么帮助,但这将是一个不同的主题/问题,可能需要更多关于你想要实现的细节。

话虽如此,我喜欢DodgerThud在评论中对(dynamicObjectDictonary中的相似值进行分组并给出正确名称的方法。

请记住,如果作为类或动态对象的键传入的字符串是从(文本)用户输入创建的,那么您应该检查该数据的有效性,否则您的程序可能会崩溃或暴露用户的其他字段。

答案 1 :(得分:0)

将一个Dictionary对象用于一组继承的变量是有意义的:它提供了一个可靠的逻辑,它恰好工作......

我认为这不是你想要完成的。我可能错了。

AS3中的类总是包含在package中 - 无论您是从Flash,Flex,Air还是其他任何程序编译都是如此......

不要让Adobe迷惑你。这只在AS3中完成,以使用基于Java的约定。无论如何,遗憾的是,松散类型的语言经常被误解。所以:

this["SuperObject"]["SubObject"]["ObjectsMethod"][ObjectsMethodsVariable"](args..);

...技术上可靠,因为编译器避免使用点符号,但在运行时它会收集大量不必要的数据来维护这些类型的调用。

如果效率成为一个问题..

使用:

package packages {
import flash.*.*:
class This implements ISpecialInterface {
// Data Objects and Function Model
// for This Class 
}
package packages {
import...
class ISpecialInterface extends IEventDispatcher