as3 operator = / (назначение объекта) - PullRequest
1 голос
/ 12 октября 2011

Я знаю, что у AS3 нет указателя или ссылки. Каждый объект уже передан по ссылке. (Я полагал?) Что мне делать, если я хочу сделать с указателем? например все объекты указывают на одну цель, мне нужно только изменить значение цели, тогда все другие объекты получат доступ к другому значению.

Ответы [ 4 ]

0 голосов
/ 13 октября 2011

Пусть эти указатели указывают на то, что содержит объект или имеет объект в качестве свойства.

Так

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] == новый объект

Тем не менее, это, кажется, отличный способ быстро доставить себе массу неприятностей. Какой вариант использования?

0 голосов
/ 13 октября 2011

Вы можете попробовать установить переменную ссылку на функцию. Затем, если вы обновите эту ссылку, она вернет другую функцию.

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 голосов
/ 13 октября 2011

Вы можете эффективно получить то же поведение, используя вспомогательный объект для имитации указателя - другими словами, используя его для переноса целевой ссылки.Например:

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 голосов
/ 12 октября 2011

Вы можете создать функцию, в которой вы дадите ей значение, а затем назначите его всем этим другим переменным.

Примерно так:

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

function myFunction(newValue:Number):void
{
objectA = newValue;
objectB = newValue;
...
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...