Форум Flasher.ru

Форум Flasher.ru (http://www.flasher.ru/forum/index.php)
-   ActionScript 3.0 (http://www.flasher.ru/forum/forumdisplay.php?f=83)
-   -   Что то не так с IN и hasOwnProperty (http://www.flasher.ru/forum/showthread.php?t=141856)

ERrorMAKros 06.07.2010 19:11

Что то не так с IN и hasOwnProperty
 
Добрый день, есть вот такой вот класс:
Код AS3:

package {
import flash.display.MovieClip;
 
public class ApplicationForm extends MovieClip {
private var Properties:Object;
public var SomeValue:String="";
 
public function ApplicationForm(){
this.Properties={someValue: "changed!"};
this.ApplyProperties();
} // ApplicationForm
 
public function ApplyProperties():void{
for(var i:String in this.Properties){
// if(this.hasOwnProperty(String(i))){ не работает
// if(String(i) in this){ не работает
    if(this.hasOwnProperty(String(i).valueOf())){
      /*
        1. говорит что String(i) не принадлежит this (срабатывает else)
        2. как правильно проверить что String(i) принадлежит this?
        3. как правильно присвоить this[String(i)] значение this.Properties[String(i)];
    */

      } else {trace("property not found");}
} // for...
} // ApplyProperties
 
} // class
} // package

Вот в this.ApplyProperties() в IF целый ряд вопросов.
По сути задача имеет сл. смысл:
1. this.Properties хранятся имена свойств (или методов) this объекта и их значения;
2. нужно узнать:
- совпадает ли имя свойства this c именем ключа в this.Properties
- если совпадает, то - присваиваем найденному свойству в this значение совпавшего имени ключа в this.Properties.

Сайлас 06.07.2010 19:40

1. Зачем столько приведений? От пхп научились?
2. В AS переменные case sensitive,

Так что в итоге такой код преображается в
Код AS3:

 
                ...
                this.Properties={SomeValue: "changed!", otherValue: '123'};
                ...
 
                public function ApplyProperties():void{
                        for(var i:String in this.Properties){
                                if(this.hasOwnProperty(i)){
                                        this[i] = this.Properties[i];
                                } else {trace("property not found");}
                        }
 
                }


wvxvw 06.07.2010 19:51

Перечислить так свойсва "запечатаных" (т.е. не динамических) классов нельзя - смотрите в сторону decribeType.

ERrorMAKros 06.07.2010 19:55

Тьфу блин, ...у меня Lucida Console стоит в редакторе, ...ломал глаза ломал, ...вроде все с регистром нормально, Сайлас - СПАСИБО! Еще бы до утра искал! Поду отдохну чуть-чуть, ...уже на глаза ничего не вижу :wacko::wacko:


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

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