Форум Flasher.ru

Форум Flasher.ru (http://www.flasher.ru/forum/index.php)
-   ActionScript 1.0/2.0 (http://www.flasher.ru/forum/forumdisplay.php?f=93)
-   -   Как отловить ситуацию: инстансу динамического класса добавляется новое свойство? (http://www.flasher.ru/forum/showthread.php?t=112106)

wvxvw 18.05.2008 19:12

Как отловить ситуацию: инстансу динамического класса добавляется новое свойство?
 
Вот, что имеется в виду: Есть dynamic class Foo. Создаем его инстанс -> var foo = new Foo();
дальше создаем у него свойство таким образом:
foo.someProp = 'abc';
ни __resolve ни addProperty в таком случае не вызывается, а что же тогда вызывается? Как можно узнать, что произошла попытка создать свойство?

DarkLight 18.05.2008 19:25

1. Это действительно так необходимо? Нельзя ли изменить структуру проекта так, чтобы избежать добавления свойств в рантайме?
2. Я бы сделал так: написал бы класс с названием типа PropertyAdder и статическим методом addProperty(instance, property, value) . А при вызове метода делал бы экземпляру класса __resolve или addProperty - как захочется

wvxvw 18.05.2008 20:00

Код:

XMLC.prototype.__resolve = function (p) {
        if (!isNaN(p)) {
                return this._childNodes[p];
        } else if (p.charAt(0) == ATTRIBUTE_ACCESSOR) {
                var attr:String = p.slice(1, p.length);
                if(attr.length){
                        if (this._attributes[attr] != undefined) {
                                return this._attributes[attr];
                        } else {
                                this._attributes[attr] = '';
                                return this._attributes[attr];
                        }
                } else {
                        return this._attributes;
                }
        } else if(p instanceof String) {
                for (var i:Number = 0; i < this.childNodes.length; i++) {
                        if (this._childNodes[i].nodeName == p) {
                                return this._childNodes[i];
                        }
                }
                this._childNodes.push(new XMLC(p));
                return this._childNodes[this._childNodes.length - 1];
        }
        return undefined;
}

Ну вот кусок кода, чтобы было понятнее зачем мне это нужно =) В двух словах - имитация ХМЛ из АС3 в АС2 =) Т.е. хочется сделать что-то на подобие хml.@attribute = 'abc'.
T.e. если делать так: хml.@['attributeName'] = 'abc'; то работает, но это не красиво =)

Alex_beginner 25.05.2008 17:37

Резидентных методов отловить данное событие нет.

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


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

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