我不确定我是否正确地提出了这个问题,但是,我有代码来详细说明。首先,我有一个Class1类:
public class Class1
{
public var S:Number = 0;
public function Class1()
{
}
}
我用来在我的文档类中创建一个对象:
public class Main extends Sprite
{
public var class1:Class1 = new Class1;
public var class2:Class2 = new Class2;
public function Main():void
{
trace(String(class1.S));
class2.c2f1(true, class1.S);
trace(String(class1.S));
}
}
我想通过从这个类创建的另一个对象的方法c2f1更新该对象的变量S:
public class Class2
{
public function Class2()
{
}
public function c2f1(param1:Boolean, f1:Number):void
{
if (param1) f1 = 1;
trace("c2f1")
}
}
输出如下:
0
c2f1
0
理想情况应该是:
0
c2f1
1
这不是我用于任何项目的实际代码,我已经指出了问题,希望我可以更容易地看到所涉及的概念。
希望有人可以提供帮助。 :)
答案 0 :(得分:1)
你的问题是它不是class1.S
的变量,而是它的副本 - 在AS3中,简单类型是按值传递的 - 也就是说,Flash会创建变量的副本,这就是传递给它的内容被调用的函数。
您可以将对象传递给此函数:
...
public function c2f1(param1:Boolean, obj:Class1):void
{
if (param1) obj.S = 1;
trace("c2f1")
}
如果需要传递多种不同的对象类型,则可以创建一个接口并传递它。然后你的Class1
类可以实现该接口,你可以通过该接口调用一个函数来增加值。
当您传递Class1
实例时,它会通过引用传递,因为它是一个复杂类型,因此您可以修改其成员变量。
或者,您的函数只能返回1或0,然后您可以将其分配给S
:
...
public function c2f1(param1:Boolean):int
{
trace("c2f1")
return ( param1 ? 1 : 0 );
}
...
var o1:Class1 = new Class1 ();
var o2:Class2 = new Class2 ();
o1.S = o2.c2f1(bValue);