使用字符串的 AS3 目标控制器类变量

Posted

技术标签:

【中文标题】使用字符串的 AS3 目标控制器类变量【英文标题】:AS3 targeting controller class variable using string 【发布时间】:2016-11-09 12:25:49 【问题描述】:

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

问题是我有多个名称几乎相同的变量,例如法语、英语、德语、西班牙语

我的 Controller 类包含公共静态变量(这些变量可以跨多个类访问),我需要一种能够动态调用其中一些变量的方法。如果变量在你调用它们的类中,你可以这样做来动态访问它们:

this["spanish"+"Language"]

在 AS3 中无法编写如下内容:

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

有什么方法可以实现吗?尽管一切正常,但我希望能够使我的代码尽可能少。

【问题讨论】:

为什么不在控制器类中使用静态字典? 你能在这方面稍微扩展一下吗? Reference 在控制器中创建一个公共静态 Dictionary 变量。您当前传递的字符串(例如“spanishLanguage”)将是保存所需信息的对象的键。假设字典名为 languages,您可以这样称呼它:Controler.languages["spanishLanguage"] 会试一试。谢谢 【参考方案1】:

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

Controller['propertyName']

我不确定这对“最少的代码”有何帮助,但这将是一个不同的主题/问题,可能需要更多关于您想要达到的目标的详细信息。

话虽如此,我喜欢 DodgerThud 在 cmets 中建议的方法,即在 (dynamic) ObjectDictonary 中对相似值进行分组,并为其命名。

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

【讨论】:

【参考方案2】:

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

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

AS3 中的类总是包裹在 package 中 - 无论您是从 Flash、Flex、Air 还是任何其他工具编译的...

不要让 Adob​​e 让您感到困惑。这只在 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

【讨论】:

以上是关于使用字符串的 AS3 目标控制器类变量的主要内容,如果未能解决你的问题,请参考以下文章

as3.0父类 parent中我要用到子类subclass中的一个名为key的变量,如何访问

是否有可能在 AS3 中获得准确的字符/字体指标?

在 As3 中创建具有类名字符串的实例

我无法从 AS3 类文件控制舞台中的 MovieClip

AS3 用图像字符替换字符串/文本

ActionScript 3 如何使用AS3访问查询字符串参数