Форум Flasher.ru

Форум Flasher.ru (http://www.flasher.ru/forum/index.php)
-   ActionScript 3.0 (http://www.flasher.ru/forum/forumdisplay.php?f=83)
-   -   Передача объекта (http://www.flasher.ru/forum/showthread.php?t=208645)

Void 09.08.2014 18:50

Передача объекта
 
Возник такой вопрос:

Есть 2 класса совмещенных в 1 пакете.
Первый:
Код AS1/AS2:

package chat
{
    import flash.display.Sprite;
    import flash.events.Event;
    import flash.text.TextField;
    class Test1 extends Sprite{
    var a:TextField = new TextField();
 
          public function Test1()
 {
 }
    }
}

И второй:
Код AS1/AS2:

package chat
{
    class Test2{
 
    public function Test1()
    {
    }
    function qwerty():void
    {
        a.text = "123";
    }
 }
}

При импорте 2-го класса в другой пакет и попытки воспользоваться его методом "qwerty" возникает ошибка: Error: Access of undefined property qwerty.
Что я делаю не так?

LifeIsRhythm 09.08.2014 19:49

Если не писать модификатор доступа, то по умолчанию будет internal, который доступен только внутри пакета.
Вообще не указывать модификаторы, это грубо для as3 и лучше научиться разбираться в них сразу.

Добавлено через 2 минуты
И то ли конструктор у Вас неправильно назван, то ли метод с большой буквы.

PedroHallo 09.08.2014 19:53

Код AS3:

a.text = "123";

Вы не определили экземпляр класса TextField, к которому обращаетесь.

Добавлено через 10 минут
Код AS3:

package chat
{
        import flash.display.Sprite;
        import flash.events.Event;
        import flash.text.TextField;
 
        /**
        * ...
        *
        */

        public class Main extends Sprite
        {
                private var textField:TextField;
                public function Main():void
                {
                        if (stage) init();
                        else addEventListener(Event.ADDED_TO_STAGE, init);
                }
 
                private function init(e:Event = null):void
                {
                        removeEventListener(Event.ADDED_TO_STAGE, init);
                        this.textField = new TextField();
                        this.addChild(this.textField);
                        const TEXT_TWO:Text2 = new Text2();
                        TEXT_TWO.qwerty(this.textField);
                }
 
        }
 
}

Код AS3:

package chat 
{
        import flash.text.TextField;
        /**
        * ...
        *
        */

        internal class Text2
        {
 
                public function Text2()
                {
 
                }
                internal function qwerty(textField:TextField):void
                {
                        textField.text = '123';
                }
        }
 
}


Void 10.08.2014 17:52

Спасибо что ответили, а как сделать так:

Есть два класса в одном пакете. В одном классе создается текстовое поле с именем txt, как к этому полю обратиться из 2-го класса?

sospamom 10.08.2014 21:52

Цитата:

Сообщение от Void (Сообщение 1170407)
Спасибо что ответили, а как сделать так:

Есть два класса в одном пакете. В одном классе создается текстовое поле с именем txt, как к этому полю обратиться из 2-го класса?

Код AS3:

package somePackage
{
        import flash.display.Sprite;
 
        public class Main extends Sprite
        {
                public function Main():void
                {
                        var b:B = new B();
                        trace(b.txt);
                }
        }
}
 
package somePackage
{
        import flash.text.TextField;
 
        public class B
        {
                public var txt:TextField;
 
                public function B()
                {
 
                }
        }
}


Моше Дауге 10.08.2014 23:23

Цитата:

Сообщение от Void (Сообщение 1170407)
Спасибо что ответили, а как сделать так:

Есть два класса в одном пакете. В одном классе создается текстовое поле с именем txt, как к этому полю обратиться из 2-го класса?

Цитата:

Сообщение от sospamom (Сообщение 1170419)
Код AS3:

package somePackage
{
        import flash.display.Sprite;
 
        public class Main extends Sprite
        {
                public function Main():void
                {
                        var b:B = new B();
                        trace(b.txt);
                }
        }
}
 
package somePackage
{
        import flash.text.TextField;
 
        public class B
        {
                public var txt:TextField;
 
                public function B()
                {
 
                }
        }
}


Вы определили переменную экземпляра, а не класса.

Добавлено через 1 минуту
Цитата:

Сообщение от Void (Сообщение 1170407)
Спасибо что ответили, а как сделать так:

Есть два класса в одном пакете. В одном классе создается текстовое поле с именем txt, как к этому полю обратиться из 2-го класса?

Код AS3:

var a:TextField = new TextField();

Вы определили переменную экземпляра, а значит, что к этой переменной можно обращаться только через экземпляр этого класса и через его потомков (если не считать ссылок).
Вам нужно определить статическую переменную — переменную класса, к которой можно обращаться только через класс, где определенна эта статическая переменная.
Чтобы определить статическую переменную Вам следует написать перед словом var слово static, и так как Вы хотите обращаться к статической переменной только в том пакете,
где она находится, то Вам следует написать перед словом static модификатор управления доступом internal — обращение внутри класса, в классах, находящихся в том же пакете, что и этот, и через потомков класса.

Код AS3:

internal static var a:TextField = new TextField();

Чтобы обратиться к статической переменной Вам следует написать перед идентификатором статической переменной (её названием) название класса, в котором она определена.

Код AS3:

Test1.a;



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

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