2011-10-12 80 views
1

我知道AS3沒有指針或引用。每個對象都已經通過引用。 (我想?) 如果我想用指針做什麼,該怎麼辦? 例如所有對象指向一個目標,我只需要改變目標的值,然後所有其他對象將訪問不同的值。as3運算符= /(對象賦值)

回答

0

通過使用助手對象來模擬指針 - 換句話說,使用它來攜帶目標引用,可以有效地獲得相同的行爲。例如:

public class PseudoPointer 
{ 
    private var obj:Object; 
    private var prop:String; 

    public function PseudoPointer(obj:Object, prop:String) 
    { 
     // Point to property with name 'prop' on object 'obj'. 
     this.obj = obj; 
     this.prop = prop; 
    } 

    public function get value():* { 
     return obj[prop]; 
    } 

    public function set value(value:*):void { 
     obj[prop] = value; 
    }   
} 

然後,你可以做到這一點 - 假設有一個magicNumber屬性的對象名爲target

var numberPtr = new PseudoPointer(target, "magicNumber"); 

myDynamicObjectA.numberPtr = numberPtr; 
myDynamicObjectB.numberPtr = numberPtr; 
myDynamicObjectC.numberPtr = numberPtr; 

現在有一個參考僞指針可以讀取任何對象,寫目標屬性:

numberPtr.value = 42; 
0

您可以創建一個函數並在其中爲其賦值,然後將其分配給所有其他變量。

類似下面:

var objectA:Number; 
var objectB:Number; 
... 

function myFunction(newValue:Number):void 
{ 
objectA = newValue; 
objectB = newValue; 
... 
} 
+0

謝謝JRulle :)這是一個好方法,但不是我想要的方式。因爲我的對象可以在運行時動態添加或刪除。這可能不那麼靈活。我在AS3中要求類似「指針」的原因是我不想做類似代碼的事情。謝謝您的回覆! – Nohappy

0

你可以嘗試設置變量引用的函數。那麼如果你更新那個引用,它會返回一個不同的函數。

var myFunc:Function; 

function funcOne():int { 
    return 1; 
} 

function funcTwo():int { 
    return 2; 
} 

function getFunc():Function { 
    return myFunc; 
} 

myFunc = funcOne; 

var myObjOne:Object = new Object(); 
myObjOne.objFunc = getFunc; 
var myObjTwo:Object = new Object(); 
myObjTwo.objFunc = getFunc; 

trace(myObjOne.objFunc.call().call()); // 1 
trace(myObjTwo.objFunc.call().call()); // 1 

myFunc = funcTwo; 
trace(myObjOne.objFunc.call().call()); // 2 
trace(myObjTwo.objFunc.call().call()); // 2 

這允許任何對象點在一個單一的功能,並有什麼回報所有這些同時可更新。它不是最漂亮的代碼,它不像類型安全,就好像ActionScript有代理強制執行myFunc設置的簽名一樣,但如果您具有創造性,它仍然是一個非常靈活的模型。

+0

哇HotN,這是一種特殊的方式,我會考慮它。謝謝 – Nohappy

0

有這些指針指向的東西,包含對象或具有對象作爲它的屬性。

所以

var myArr:Array = [new YourObject()]; var client1:ArrayClient = new ArrayClient(); client1.array = myArr; var client2:ArrayClient = new ArrayClient(); client2.array = myArr;

myArr [0] = new YourObject();

//client1.array[0]==client2.array[0]==the新對象

然而,這似乎是一個偉大的方式來讓自己陷入了很大的麻煩真的很快。什麼是用例?

+0

嘿艾米,我對「ArrayClient」感到困惑。這是一個定製的課程嗎? – Nohappy

+0

是的。這是一個假設的類,它引用了一個數組。 –