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

this.create 08.07.2007 15:57

Компилятор не видит объект.
 
Первый пример.
Класс:
Код:

class Test {
    public function onPres():Void {
        trace(this);
    }
}

Код в swf:
Код:

var test:Test = new Test();
mc.onPress = test.onPres;

Нажимаем и получаем в трэйсе _level0.mc

Далее.
Класс:
Код:

class Test {
    public function onPres():Void {
        trace(this._x);
    }
}

Компилируем и получаем сообщение об ошибке следующего содержания:
Цитата:

There is no property with the name '_x'. trace(this._x);
Т.е мувиклип в метод передается, но попытка получить доступ к его свойствам вызывает ошибку компиляции. У меня такое подозрение, что компилятору нужно явно указать что в метод передается именно объект типа MovieClip, чтобы он мог спокойно работать с его свойствами. А если явно не указывать, то фактически неизвестно с каким объектом будет идти работа( это определится только при вызове метода). Можно ли как-то обойти это ограничение?

iNils 08.07.2007 16:21

Способ 1:
Код:

class Test {
        private var _x:Number;
        function Test () {
               
        }
        public function onPres():Void {
                trace (this._x)
        }
}

Способ 2:
Код:

class Test {
        function Test () {
               
        }
       
        public function onPres():Void {
                trace (this["_x"])       
        }
}

Способ 3 (самый правильный):
Код:

class Test {
        private var __mc:MovieClip;
        function Test (mc:MovieClip) {
                __mc = mc;
        }
       
        public function onPres():Void {
                trace(__mc._x);
        }
}

Код:

import mx.utils.Delegate;
var test:Test = new Test(mc);
mc.onPress = Delegate.create (test, test.onPres);


etc 08.07.2007 16:26

А что помешало метод так и назвать onPress, не убирая последнюю букву?
Никаких объектов в метод не передается, просто у метода изменяется область видимости на область видимости клипа mc, поэтому this ссылается уже не на экземпляр класса, а на клип. Но компилятор об этом ничего не знает, более того, в целом такой подход в принципе неверный.

this.create 08.07.2007 17:09

iNils
Спасибо. Целых три способа.

__etc
Изменил название чтобы методы не повторялись, но если и так работает не буду менять.


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

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