使用字符串的 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
) Object
或 Dictonary
中对相似值进行分组,并为其命名。
请记住,如果您作为类或动态对象的键传入的字符串是从(文本)用户输入创建的,您应该对该数据的有效性进行一些检查,否则您的程序可能会崩溃或暴露其他字段给用户。
【讨论】:
【参考方案2】:将 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
【讨论】:
以上是关于使用字符串的 AS3 目标控制器类变量的主要内容,如果未能解决你的问题,请参考以下文章