Форум Flasher.ru

Форум Flasher.ru (http://www.flasher.ru/forum/index.php)
-   ActionScript 3.0 (http://www.flasher.ru/forum/forumdisplay.php?f=83)
-   -   Динамические свойства в with() (http://www.flasher.ru/forum/showthread.php?t=137296)

ERrorMAKros 10.03.2010 05:52

Динамические свойства в with()
 
Извиняюсь за неправильное название топика, прошу модераторов поправить название (излишки ночного кодописания)

Добрый день (вечер).
Вот появился такой вот вопрос:
Код AS3:

var myObj:Object={PropOne:"text", PropTwo:false, PropN: Math.random()};
var somePropName: String="PropN";
var Value: Number=30;
with(myObj)
{
// somePropName=Value; ????
}

Возможно ли изменить значение свойства в myObj внутри инструкции with, имея название свойства - в виде строки и не обращаясь к myObj напрямую?

Juice_Green 10.03.2010 08:25

а что мешает сразу обратиться напрямую?
Код AS3:

with(myObj)
{
  PropN = Value;
}


Котяра 10.03.2010 09:29

я бы не советовал использовать with - абсолютно не улучшает читаемость кода, а наоборот ухудшает.
Код AS3:

myObj[somePropName] = value;

и вообще лучше не использовать Object а создать свой кастомный класс данных

Код AS3:

package  
{
        public class CustomObject
        {
                public var one:String;
                public var two:Boolean;
                public var n:Number;
 
                public function CustomObject($one:String,$two:Boolean,$n:Number)
                {
                        one = $one;
                        two = $two;
                        n = $n;
                }
 
        }
 
}
........
 
var myObj:CustomObject= new CustomObject("text",false,Math.random());
var value: Number=30;
myObj.n = value;


ERrorMAKros 10.03.2010 13:59

Дело в том что имена свойств в myObj меняются, в нем может быть "что угодно"
рассчитывал получить доступ к методу таким образом:
Код AS3:

var myObj:Object={PropOne:"text", PropTwo:false, PropN: Math.random()};
var somePropName: String="PropN";
var Value: Number=30;
with(myObj)
{
[somePropName]=Value; // ...но оказалось, что - напрасно :)
}


gloomyBrain 10.03.2010 14:09

Можно использовать flash.utils.describeType(myObj) - получите XML с полным описанием всех свойств, методов, акцессоров и тд. Потом пройтись по этому XML циклом for each и найти нужное свойство. Все =)

silin 10.03.2010 14:26

Код AS3:

with(myObj)
{
        valueOf()[somePropName] = value;
}


Котяра 10.03.2010 14:57

Цитата:

Сообщение от ERrorMAKros (Сообщение 892127)
Дело в том что имена свойств в myObj меняются, в нем может быть "что угодно"
рассчитывал получить доступ к методу таким образом:
Код AS3:

var myObj:Object={PropOne:"text", PropTwo:false, PropN: Math.random()};
var somePropName: String="PropN";
var Value: Number=30;
with(myObj)
{
[somePropName]=Value; // ...но оказалось, что - напрасно :)
}


а чем не устраивает без with?

Код AS3:

var myObj:Object={PropOne:"text", PropTwo:false, PropN: Math.random()};
var somePropName: String="PropN";
var Value: Number=30;
myObj[somePropName]=Value;


ERrorMAKros 10.03.2010 20:18

2 Silin: Великолепно! То что доктор прописал!
2 All: Смысл задачи именно в ее сути! Способов реализации данной задачи - достаточно :) Интересовала реализация именно при работе с инструкцией with().

Вот и решение (by Silin):
Код AS3:

var myObj:Object={PropOne:"text", PropTwo:false, PropN: Math.random()};
var somePropName: String="PropN";
var Value: Number=30;
with(myObj)
{
valueOf()[somePropName] = Value;
}

Всем спасибо, полагаю - топик можно считать закрытым :)

wvxvw 10.03.2010 20:27

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


Часовой пояс GMT +4, время: 08:59.

Copyright © 1999-2008 Flasher.ru. All rights reserved.
Работает на vBulletin®. Copyright ©2000 - 2026, Jelsoft Enterprises Ltd. Перевод: zCarot
Администрация сайта не несёт ответственности за любую предоставленную посетителями информацию. Подробнее см. Правила.