ActionScript Настройка свойств объекта из других свойств объекта? - PullRequest
0 голосов
/ 26 июня 2010

Я пытаюсь привести свойство объекта как фактическое свойство другого объекта.

вот моя переменная объекта:

var propObj:Object = {prop:"width", width:50};

Теперь я хочу назначить свойство спрайта, используя свойства этого объекта.

var sp:Sprite = new Sprite();
sp.(propObj.prop as Sprite.property) = propObj.width;

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

почему я пытаюсь это сделать, потому что я читаю в файле XML с неопределенным списком используемых свойств для определенных объектов. поэтому вместо того, чтобы писать что-то вроде огромного оператора switch для оценки того, имеет ли файл XML значение для этого конкретного свойства, я пытаюсь динамически назначать свойства на основе того, что доступно в файле XML.

если то, что я пытаюсь сделать, возможно, то как лучше это сделать?

1 Ответ

2 голосов
/ 26 июня 2010

Если вы определили propObj, как вы, вы можете сделать что-то вроде:

var propObj:Object = {prop:"x", x:50};
var sp:Sprite = new Sprite();
sp[propObj.prop] = propObj.x;

Теперь, более общий и, возможно, более полезный способ сделать то, что вы пытаетесь сделать, будет:

var props:Object = {x:10,y:50,unexistentProp:300};
for (var propName:String in props) {
    if(sp.hasOwnProperty(propName)) {
        sp[propName] = props[propName];
    }
}

Приведенный выше код игнорирует свойства, которые не определены для целевого объекта. Это необходимо для нединамических классов, таких как Sprite. В противном случае ваш код выдаст ошибку. Вам решать, хотите ли вы что-нибудь сделать с недопустимыми именами свойств; если это так, вы можете добавить необходимый код в другое. Вы также можете обнаружить ошибку с помощью try / catch, но убедитесь, что перехватываете только это конкретное исключение - ReferenceError - или это может маскировать другие ошибки, такие как нулевые ссылки и т. Д. Другой вариант - не проверять ошибки или пытаться / catching и позволить коду вывести ошибку в стек вызовов. Это кажется мне плохой идеей. Лучше разобраться с ошибкой как можно скорее (и как можно ближе к месту, где она произошла).

...