Как я могу получить доступ к переменным экземпляра в закрытии (внутренняя функция) для этого стиля: this ['varName']? - PullRequest
0 голосов
/ 10 февраля 2012

Как мне получить доступ к переменным экземпляра в замыкании (внутренняя функция) для этого стиля: this['varName']?

public class Test extends Sprite
{
    private var a0:String = 'a0';
    private var a1:String = 'a1';
    private var a2:String = 'a2';

    public function Test()
    {
        var testFun:Function = function(evt:Event):void
        {
            for(var i:uint = 0; i < 3; i += 1)
            {
                trace(this['a'+i]);//how to access instance variables?
            }
        };
        this.addEventListener(Event.ENTER_FRAME, testFun);
    }
}

1 Ответ

2 голосов
/ 10 февраля 2012

Квадратные скобки могут использоваться для доступа к свойствам Object (всего) точно так же, как вы делали выше:

object[propertyName]

Или установите свойства, предполагая, что ваш класс либо dynamic, либо уже имеет свойство, которое вы пытаетесь установить:

object[propertyName] = 10;

С Объектом вы фактически можете использовать цикл for(String in Object) для вывода всех требуемых свойств:

var object:Object = {
    test: "string",
    another: 5
};

for(var i:String in object)
{
    trace(i + ": " + object[i]);
}

Что касается вашего текущего кода, реструктурируйте его:

public class Test extends Sprite
{
    private var a0:String = 'a0';
    private var a1:String = 'a1';
    private var a2:String = 'a2';

    public function Test()
    {
        testFun();
    }

    public function testFun():void
    {
        for(var i:uint = 0; i < 3; i += 1)
        {
            trace(this['a'+i]);
        }
    }
}

Если вы должны сохранить свою внутреннюю функцию, проанализируйте в ней ссылку на ваш текущий экземпляр Test:

var testFun:Function = function(subject:Test):void
{
    for(var i:uint = 0; i < 3; i += 1)
    {
        trace(subject['a'+i]);//how to access instance variables?
    }
};

А потом:

testFun(this);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...