Форум 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=98433)

romantique 13.07.2007 11:52

Проблема с вложенностью объекта
 
У меня есть такой класс:
Код:

class MyClass
{
        private var Document:XML;

        public function MyCal(){}

        public function run()
        {
                this.Document = new XML();
                this.Document.onLoad = __onLoadFunction;
                this.Document.load("some.xml");
        }

        private function __onLoadFunction(success)
        {
                trace(this); traces XML why???
        }
}

Как видно приписываю хандлеру объекта XML приватную функцию из MyClass.

В этой __onLoadFunction функции this должно означать экзэмпляр MyClass, разве нет ??? Но trace() говорит что this означает экзэмпляр XML.

Ну да хрен с ним, пусть в __onLoadFunction оно означает Document (экзэмпляр XML class), тогда разве я не могу доступиться до экзэмпляра MyClass с помощью _parent?. trace() говорит что_parent undefined. Кроме того, не смотря на то, что trace(this) печатает сам XML документ, любой метод, к примеру this.load() уже не может быть найден, ничего не понимаю...

Как мне достучаться до экзэмпляра MyClass изнутри __onLoadFunction ?????

silin 13.07.2007 12:37

все как написано:
onLoad (который у тебя ссылается на __onLoadFunction) вызывается в контексте Document..
_parent будет у Document, только если ты его сам определишь..
обычное решение:
Document.onLoad =mx.utils.Delegate.create(this, __onLoadFunction);

romantique 13.07.2007 12:50

Получается в контексте работы __onLoadFunction функции слово this означает именно Document??? Но тогда почему я не могу вызвать ничего от this??? К примеру getBytesTotal. А еще что странно вызывается только toString.

trace(this instanceof XML) говорит true.

romantique 13.07.2007 12:55

**Error** C:\Dev\ExPlain\SequenceLoader.as: Line 32: There is no method with the name 'mx'.
this._Document.onLoad = mx.utils.Delegate.create(this,this.__onLoadFunction);

etc 13.07.2007 13:23

romantique, синий цвет специально для того, чтобы сломать глаза читающим?

romantique 13.07.2007 13:30

Цитата:

romantique, синий цвет специально для того, чтобы сломать глаза читающим?
я думал форум белого цвета, забыл :-D

etc 13.07.2007 13:37

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

mx.utils.Delegate должен быть.

romantique 13.07.2007 13:44

И всё таки к вопросу: что значит this во время работы __onLoadFunction ???

etc 13.07.2007 13:47

В AS1/AS2 при присвоении метода одного объекта к другому, область видимости меняется на область видимости последнего. Для решения этой проблемы существует класс Delegate, пример использования которого уже написан.

romantique 13.07.2007 13:54

Встроенного почему то не было, нашёл код в глобе, заюзал! Спасибо огромное, дышется легче:)


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

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