2012-02-27 58 views
0

我不確定我是否正確表達了問題,但是,我有代碼來詳細說明問題。首先,我有一個類的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 

這不是我使用的任何項目的實際代碼,我已經在希望我可以更容易地看到涉及的概念規定的問題。

希望有人能幫忙。 :)

回答

1

你的問題是,它不是class1.S的變量增加了,但它的一個副本 - 在AS3中,簡單類型通過值傳遞 - 也就是說,Flash創建一個變量的副本,這就是傳遞給稱爲功能。

您可以將對象傳遞給這個函數:

... 
public function c2f1(param1:Boolean, obj:Class1):void 
{ 
    if (param1) obj.S = 1; 
    trace("c2f1") 
} 

如果需要傳遞多個不同的對象類型,可以改爲創建一個接口和傳遞。然後你的類可以實現這個接口,你可以通過該接口調用一個函數來增加這個值。

當你傳遞你的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); 
+0

謝謝,這是非常有益的。 :) – Joe 2012-02-27 04:13:59

相關問題