As3操作符= /(对象赋值)



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

您可以通过使用helper对象来模拟指针来有效地获得相同的行为——换句话说,使用它来携带目标引用。例如:

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;
   }        
}
然后你可以这样做——假设在一个名为target的对象上有一个magicNumber属性:
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设置的签名那样类型安全,但如果你有创意的话,它仍然是一个非常灵活的模型。

让这些指针指向包含该对象或将该对象作为其属性的对象。

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

myArr[0] = new YourObject();

//client1.array [0] = = client2。数组[0]==新对象

然而,这似乎是一个伟大的方式让自己陷入很多麻烦真的很快。用例是什么?

相关内容

  • 没有找到相关文章

最新更新