AS3 - получение значения свойства в другом свойстве через квадратную скобку - PullRequest
2 голосов
/ 29 ноября 2011

У меня есть класс Inhabitant со свойством skin типа DisplayObject.

В Inhabitant мне нужно получить доступ к свойствам кожи x и y, используя этот метод:

this["someProperty"];

Вместо:

this.someProperty;

Это нормально для свойств, определенных в Inhabitant, но я не уверен, как я мог бы сделать это для свойства skin. Это, очевидно, не работает, но может дать вам представление о том, что я пытаюсь сделать:

this["skin.x"];

Причина, по которой требуется это обозначение, заключается в том, что у меня есть функция, с помощью которой я могу анализировать строку, хотя она будет представлять свойство:

public function addTokenable(property:String):void
{
    if(!isTokenable(property))
        _tokenables[property] = true;
}

А затем связанный метод получения, который вернет представление этого экземпляра Inhabitant в виде строки:

public function get token():String
{
    _token = "class:" + getQualifiedClassName(this).split("::").join(".");

    for(var i:String in _tokenables)
        _token += "#" + i + ":" + this[i];

    return _token;
}

Это приведет к чему-то вроде:

class:terra.environment.Inhabitant#someProperty:someValue#etc:etc

Цель состоит в том, чтобы иметь возможность ссылаться на свойства скина в методе addTokenable(), чтобы у меня было что-то вроде:

var person:Inhabitant = new Inhabitant();

person.skin = new PersonSkin();
person.skin.x = 100;
person.skin.y = 150;

person.addTokenable("skin.x");
person.addTokenable("skin.y");

trace(person.token); // class:terra.environment.Inhabitant#skin.x:100#skin.y:150

1 Ответ

3 голосов
/ 29 ноября 2011

Как насчет того, чтобы сделать что-то вроде этого:

for (var i:String in _tokenables) {
    var target:* = this;
    var propList:Array = i.split(".");
    for (var j:Number = 0; j < propList.length; j++) {
        try {
            target = target[propList[j]];
        } catch (e:Error) {
            trace(e.getStackTrace());
            // or whatever other stuff you want to do
        }
    }
    _token += '#' + i + ":" + target;
}

Например."skin.x" создаст propList из ['skin', 'x']. Первая итерация цикла for установит

target = this['skin'];

, а вторая -

target = this['skin']['x'];

которая является правильной скобкой для доступа к свойству скина x.

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