as3 operator = /(对象分配)

时间:2011-10-12 18:00:07

标签: actionscript-3

我知道AS3没有指针或引用。每个对象都已通过引用传递。 (我认为?) 如果我想用指针做什么我该怎么办? 例如所有对象都指向一个目标,我只需要更改目标的值,然后所有其他对象将访问不同的值。

4 个答案:

答案 0 :(得分:0)

您可以创建一个函数,然后在其中为其赋值,然后将其分配给所有其他变量。

如下所示:

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

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

答案 1 :(得分: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设置的签名一样,但如果你有创意,它仍然是一个非常灵活的模型。

答案 2 :(得分: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;

答案 3 :(得分: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] ==新对象

但是,这似乎是一种很快让自己陷入困境的好方法。用例是什么?