Flash 可以在类函数内部读取主脚本中的变量吗?

Flash 可以在类函数内部读取主脚本中的变量吗?,flash,actionscript-2,flash-cs6,Flash,Actionscript 2,Flash Cs6,我正在学习ActionScript2.0,通过剖析一些免费提供的源代码并对其进行修改,我遇到了一些小问题 我的.fla附带了3个.as文件,它们是: “script.as”包含我构建的flash界面的所有基本功能。 “skin.as”包含接口skin类声明和类函数。 “defaultskin.as”包含类声明和扩展“skin”类的函数 .fla的第一帧只包含“script.as”,我通过ActionScript链接下的右键单击/属性菜单将“interface”movieclip(这是我的主fla

我正在学习ActionScript2.0,通过剖析一些免费提供的源代码并对其进行修改,我遇到了一些小问题

我的.fla附带了3个.as文件,它们是:

“script.as”包含我构建的flash界面的所有基本功能。
“skin.as”包含接口skin类声明和类函数。
“defaultskin.as”包含类声明和扩展“skin”类的函数

.fla的第一帧只包含“script.as”,我通过ActionScript链接下的右键单击/属性菜单将“interface”movieclip(这是我的主flash界面)链接到“defaultskin”类

我在“script.as”中用一个简单的var语句声明了一个变量。这个变量可以在“skin.as”中的一个函数中读取吗?或者我需要做一些特殊的事情来让它对那个类可读吗

如何做到这一点,而不使变量成为公共静态变量,也不将其作为函数的参数传递

为了进一步澄清,script.as看起来像这样(假设m_interface是movieclip对象的名称):

skin.as看起来像:

//imports

class skin
{
 //variable declarations

 public function skin()
 {
  // code
 }

 function Initialize()
 {
  trace(myVar);
 }
}
在不编写所有fluff代码的情况下,defaultskin.as声明了这样一个类:

class defaultskin extends skin

默认情况下,然后使用
var
它为其提供
内部
访问修饰符。 因此,它只能由类或同一包中的任何类访问 因此,如果您不使用任何其他修饰符,或者不以某种方式将此变量传递给您的类,答案是“不,它不可访问” 若您使用
public
修饰符,那个么您可以将变量的访问权授予任何类,但还有一些其他限制 正如您已经注意到的,您添加了
静态
修饰符,这意味着您不需要创建类的实例就可以访问它
公共静态
变量

所以,要在另一个类中访问一个类的变量,需要导入这个类,并且这个变量是静态的。若它不是静态的,那个么您应该先创建类的实例,然后才能访问它

var newClassInstance = new ClassName();
trace(newClassInstance.varible);

另一种方法是类
skin
实例位于script.as类中。。。所以在script.as中的某个地方,有一个变量引用了skin的实例。在这种情况下,您可以使用皮肤中的
\u parent
访问script.as实例的变量。as

这就是我所怀疑的,但我想我无论如何都会问。谢谢你的回复。很可能我最终会更改类函数,以便将变量作为参数传递。这是有问题的,因为主脚本.as文件在某些地方调用defaultskin.as中的函数,而defaultskin.as又反过来调用skin.as,因此我必须修改这两个函数,并更改对函数的所有调用以包含额外参数。额外的工作,但至少它可以在不使用公共变量的情况下完成任务。更新:嗯,我想如果变量在类中,您可以使用关键字public来声明变量。我想我会整夜重写来传递变量,而不是传递变量本身,你可以传递对类实例的引用来访问它的变量。使所有函数都使用始终具有相同值的参数不是很好的OOP。但是as2在很多方面都不是OOP…我如何传递对类实例的引用?我有二十多个变量需要在类内外引用,这使得将它们作为单个变量传递成为真正的问题,也是我不想这样做的原因。如果我可以传递类引用并访问函数,那么我的脚本也会大大简化。让我们使用专有名称。为了简单起见,类是一种模板,它包含该类实例的适当数据和类型的列表。另一方面,该类的实例是存储实际数据的对象。例如,类是一个人,您和我是it类的实际实例,它们都具有相同的属性和功能列表,但具有不同的值。
var newClassInstance = new ClassName();
trace(newClassInstance.varible);