【问题标题】:Automatic instantiation of custom class occuring on import in Actionscript 3 Flash Pro在 Actionscript 3 Flash Pro 中导入时发生的自定义类的自动实例化
【发布时间】:2014-10-04 04:40:00
【问题描述】:

在剖析我在 Flash Pro CS6 中给出的一些 AS3 代码时,我注意到其中一个类从未被声明或实例化,但它被访问了,并且与它的 import 语句同名。示例:

import records;  //package file records.as
//Import instantiates records and it is usable!

records.zip = "12345";
trace (records.Zip, " ", records.Name);  //this works

//I thought this was always necessary
var r : records = new records();
r.init_records();

我注意到这个变量“记录”在其他几个导入的类中被大量访问,所以我想知道这是一种好的做法,还是容易出错?如果您知道一个,您可以向我指出描述此“功能”的资源。我知道如果我想保留名为“records”的类并将其作为变量“records”访问,Flash 绝不会让我声明以下内容:

var records : records = new records();

这对我来说似乎很奇怪,我想确保代码在我进一步开发时是健壮的。

最后,在系统的后期,以下代码似乎用于重置“记录”变量:

import records; //package file records.as
var new_records : records = new records();
new_records.init_records();

再次导入 records.as 会重置这个自动实例化的变量吗?或者将在新实例上声明和调用 init_records()(在此之后从未引用过,它会返回引用“记录”)来重置默认实例化?

【问题讨论】:

  • 您能帮我更好地理解您的问题吗?您是在问应该使用单例类、静态类还是普通类?导入一个类不会重新实例化该类,它只允许脚本/框架访问该类。
  • 显然,经过更多研究,这是一种在整个代码中创建和使用全局变量的方法。您导入 .as 文件(从技术上讲,您甚至不必使用 import 语句,只需将其包含在您的编译列表中)并通过类本身的名称来引用类内容。我想弄清楚的是(1)再次导入类是否运行构造函数,从而修改所有现有的全局变量,以及(2)创建类的第一个真实实例是否对全局变量版本有任何影响班上的?

标签: actionscript-3 flash


【解决方案1】:

看起来有人正在使用记录类作为存储全局变量的全局对象。该类应该是一个单例,因此在项目中只有一个实例,但正如您稍后在系统中发现的那样,它被实例化的地方在设计模式中是失败的。

【讨论】:

  • 谢谢,这很有道理。我最终弄清楚了全局部分,但是实例化为一个从未使用过的变量让我觉得很奇怪。我猜第二次将一个类作为静态全局对象导入可能会再次运行构造函数,并且(在此代码的情况下)将所有变量重置为默认值。但我得先测试一下。
猜你喜欢
  • 2018-06-12
  • 2014-02-08
  • 1970-01-01
  • 1970-01-01
  • 2012-05-26
  • 1970-01-01
  • 1970-01-01
  • 2019-01-29
  • 1970-01-01
相关资源
最近更新 更多