Показать сообщение отдельно
Старый 23.10.2006, 13:18
MerlinTwi вне форума Посмотреть профиль Отправить личное сообщение для MerlinTwi Посетить домашнюю страницу MerlinTwi Найти все сообщения от MerlinTwi
  № 57  
Ответить с цитированием
MerlinTwi
 
Аватар для MerlinTwi

Регистрация: Oct 2003
Адрес: Москва
Сообщений: 328
По умолчанию 62. Методы getProperty и setProperty класса Proxy

Методы getProperty и setProperty используются для управления необъявленными свойствами класса. Если какое-то свойство явно не объявлено в классе, то при попытке прочитать его значение, будет вызван метод getProperty. Аналогично при записи вызывается метод setProperty.
Как и все методы класса Proxy, getProperty и setProperty объявлены в пространстве имен «flash_proxy» (flash.utils.flash_proxy), чтобы не возникало конфликтов с публичными методами. Для переопределения этих методов в своем классе обязательно нужно указывать пространство имен flash_proxy.
Пример: класс CustomObject наследуется от Proxy и переопределяет методы getProperty и setProperty для управления динамическими свойствами.
Код:
package {
    
    import flash.utils.Proxy;
    import flash.utils.flash_proxy;
    
    dynamic public class CustomObject extends Proxy {
        
        public var classProperty:String = "classProperty"; // объявленное свойство
        private var customProperties:Object = new Object(); // хранилище динамических свойств
        
        public function CustomObject() {
        }
        
        // Вызывается при чтении динамического свойства
        override flash_proxy function getProperty(name:*):* {
            if (name in customProperties) {
                return customProperties[name];
            }
            return "Property does not exist";
        }
        // Вызывается при записи в динамическое свойство
        override flash_proxy function setProperty(name:*, value:*):void {
            customProperties[name] = "Property "+name+": "+value;
        }
    }
}
Код:
// Пример использования
var myObj:CustomObject = new CustomObject();
trace(myObj.foo); // Property does not exist
myObj.foo = "bar";
trace(myObj.foo); // Property foo: bar

trace(myObj.classProperty); // classProperty
myObj.classProperty = "bar";
trace(myObj.classProperty); // bar
Обратите внимание, что методы getProperty и setProperty вызываются при попытке доступа к необъявленным свойствам класса. В примере, при доступе к явно объявленному свойству «classProperty» эти методы не вызывались.
__________________
Создатель: Бойцовский клуб | TimeZero | Sky2Fly
Я возьму сам.