我知道AS3没有指针或引用。每个对象都已通过引用传递。 (我认为?) 如果我想用指针做什么我该怎么办? 例如所有对象都指向一个目标,我只需要更改目标的值,然后所有其他对象将访问不同的值。
答案 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] ==新对象
但是,这似乎是一种很快让自己陷入困境的好方法。用例是什么?