我知道AS3沒有指針或引用。每個對象都已經通過引用。 (我想?) 如果我想用指針做什麼,該怎麼辦? 例如所有對象指向一個目標,我只需要改變目標的值,然後所有其他對象將訪問不同的值。as3運算符= /(對象賦值)
回答
通過使用助手對象來模擬指針 - 換句話說,使用它來攜帶目標引用,可以有效地獲得相同的行爲。例如:
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;
您可以創建一個函數並在其中爲其賦值,然後將其分配給所有其他變量。
類似下面:
var objectA:Number;
var objectB:Number;
...
function myFunction(newValue:Number):void
{
objectA = newValue;
objectB = newValue;
...
}
你可以嘗試設置變量引用的函數。那麼如果你更新那個引用,它會返回一個不同的函數。
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設置的簽名一樣,但如果您具有創造性,它仍然是一個非常靈活的模型。
哇HotN,這是一種特殊的方式,我會考慮它。謝謝 – Nohappy
有這些指針指向的東西,包含對象或具有對象作爲它的屬性。
所以
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新對象
然而,這似乎是一個偉大的方式來讓自己陷入了很大的麻煩真的很快。什麼是用例?
嘿艾米,我對「ArrayClient」感到困惑。這是一個定製的課程嗎? – Nohappy
是的。這是一個假設的類,它引用了一個數組。 –
- 1. Flash AS3 addChild /賦值運算符
- 2. 賦值運算符的對象
- 3. 對象的賦值運算符
- 4. java複合賦值運算符和賦值運算符
- 5. 移動賦值運算符VS拷貝賦值運算符
- 6. 運算符超載賦值運算符
- 7. 賦值運算符 - 自賦值
- 8. C++模板賦值運算符重載 - 將基元類型賦值給對象?
- 9. 重載賦值運算符
- 10. BigDecimal的賦值運算符
- 11. C++「| =」賦值運算符
- 12. 使用賦值運算符
- 13. 賦值運算符在
- 14. 嫩枝賦值運算符
- 15. 重載賦值運算符
- 16. 布爾賦值運算符
- 17. 默認賦值運算符
- 18. 賦值=運算符超載
- 19. 布爾賦值運算符
- 20. 賦值運算符繼承
- 21. c賦值運算符=
- 22. PHP賦值運算符=&
- 23. 聲明對象和賦值運算符的引用
- 24. 對象方法的賦值運算符概念的可能性
- 25. 將賦值運算符綁定到boost :: function對象
- 26. C++拷貝賦值運算符的參考對象變量
- 27. 模板賦值運算符不替換默認賦值運算符
- 28. 逗號運算符和賦值運算符 - 返回值
- 29. 字符串賦值運算符C++
- 30. C++ 11字符串賦值運算符
謝謝JRulle :)這是一個好方法,但不是我想要的方式。因爲我的對象可以在運行時動態添加或刪除。這可能不那麼靈活。我在AS3中要求類似「指針」的原因是我不想做類似代碼的事情。謝謝您的回覆! – Nohappy