IPB

Здравствуйте, гость ( Вход | Регистрация )

> Получить значения свойства одного класса из другого
  • Сервис онлайн-записи на собственном Telegram-боте
    Тот, кто работает в сфере услуг, знает — без ведения записи клиентов никуда. Мало того, что нужно видеть свое расписание, но и напоминать клиентам о визитах тоже. Нашли самый бюджетный и оптимальный вариант: сервис VisitTime.
    Для новых пользователей первый месяц бесплатно.
    Чат-бот для мастеров и специалистов, который упрощает ведение записей:
    Сам записывает клиентов и напоминает им о визите;
    Персонализирует скидки, чаевые, кэшбэк и предоплаты;
    Увеличивает доходимость и помогает больше зарабатывать;
    Начать пользоваться сервисом
  • Как продвинуть сайт на первые места?
    Вы создали или только планируете создать свой сайт, но не знаете, как продвигать? Продвижение сайта – это не просто процесс, а целый комплекс мероприятий, направленных на увеличение его посещаемости и повышение его позиций в поисковых системах.
    Ускорение продвижения
    Если вам трудно попасть на первые места в поиске самостоятельно, попробуйте технологию Буст, она ускоряет продвижение в десятки раз, а первые результаты появляются уже в течение первых 7 дней. Если ни один запрос у вас не продвинется в Топ10 за месяц, то в SeoHammer за бустер вернут деньги.
    Начать продвижение сайта
HaWK
сообщение 16.10.2010 - 12:05
Сообщение #1


Моdератор
****

Группа: Пользователь
Сообщений: 874
Регистрация: 12.03.2008
Пользователь №: 4145



Есть класс документа:
Код
package {
  
   import flash.display.MovieClip;

   public class Main extends MovieClip {
       public var myVar:int;
  
       public function Main() {
           myVar = 5;
       }
   }
}

И есть другой класс. Как мне из другого класса получить значение свойства myVar класса документа?
Вернуться в начало страницы
 
+Ответить с цитированием данного сообщения
2 страниц V   1 2 >  
Открыть новую тему
Ответов (1 - 19)
MustLive
сообщение 16.10.2010 - 16:21
Сообщение #2


Ветеран конференции
****

Группа: Flash Zone Team
Сообщений: 3912
Регистрация: 10.03.2005
Из: Киев
Пользователь №: 5



Цитата
И есть другой класс. Как мне из другого класса получить значение свойства myVar класса документа?

Стандартным для ООП путём - через методы класса. Т.е. в одном классе (Main) ты создаёшь метод для доступа к свойству (myVar), а из другого класса (из любых других классов) к нему обращаешься.

Добавь в класс Main следующий метод:
Код
       public function getVar() {
           return myVar;
       }

При этом само свойство myVar ты можешь сделать private, а не public (чтобы только через методы можно было к нему обратиться). Иначе можно будет напрямую к свойству обращаться.

Код
Main MyObject = new Main();
trace(MyObject.getVar()); // обращение через метод (при myVar как public, так и private)
trace(MyObject.myVar); // обращение напрямую к свойству (при myVar как public)

При myVar как public возможно не только чтение, но и запись напрямую в свойство (MyObject.myVar = 1), а если бы myVar был private, то этого нельзя было бы сделать (ни прочитать, ни записать напрямую), и для записи нужно было бы сделать соответствующий метод.
Вернуться в начало страницы
 
+Ответить с цитированием данного сообщения
HaWK
сообщение 16.10.2010 - 16:29
Сообщение #3


Моdератор
****

Группа: Пользователь
Сообщений: 874
Регистрация: 12.03.2008
Пользователь №: 4145



Вообще экземпляр класса документа создаётся только один раз, MustLive. Мне нудно получить именно из него это свойство.
Ты в курсе что такое класс документа?

Сообщение отредактировал HaWK - 16.10.2010 - 16:30
Вернуться в начало страницы
 
+Ответить с цитированием данного сообщения
MustLive
сообщение 17.10.2010 - 01:43
Сообщение #4


Ветеран конференции
****

Группа: Flash Zone Team
Сообщений: 3912
Регистрация: 10.03.2005
Из: Киев
Пользователь №: 5



Цитата
Вообще экземпляр класса документа создаётся только один раз, MustLive. Мне нудно получить именно из него это свойство.

HaWK

Ну раз создался у тебя один раз экземпляр, то и считывай из него свойства. Как это сделать, я описал выше.

Класс документа ты описал как class Main (т.е. я понял, что это какой-то твой класс). Вот я и привёл пример кода для работы с ним. Если это какой-то стандартный класс (а с классами AS3 я не знаком), поставляемый с флешем, то почитай его документацию или изучи исходник (если нет возможности/времени/желания читать документацию), и воспользуйся теми способами, что я описал выше. И прочитаешь значение этого свойства.
Вернуться в начало страницы
 
+Ответить с цитированием данного сообщения
HaWK
сообщение 17.10.2010 - 22:28
Сообщение #5


Моdератор
****

Группа: Пользователь
Сообщений: 874
Регистрация: 12.03.2008
Пользователь №: 4145



Да это мой класс. И его экземпляр создаётся один раз (самим Flash). Вот как к нему обратится я не знаю.
Вернуться в начало страницы
 
+Ответить с цитированием данного сообщения
MustLive
сообщение 17.10.2010 - 23:33
Сообщение #6


Ветеран конференции
****

Группа: Flash Zone Team
Сообщений: 3912
Регистрация: 10.03.2005
Из: Киев
Пользователь №: 5



Цитата
И его экземпляр создаётся один раз (самим Flash). Вот как к нему обратится я не знаю.

Откуда ты знаешь, что он создаётся? Если ты об этом читал в какой-либо документации, то там и прочитай о том, как к данному экземпляру обратиться.

Чтобы проверить, что флеш автоматически создаёт экземпляр класса Main, возьми в конструкторе класса (function Main()) выведи трейс (за myVar), чтобы получить результат в окне Output:
Код
myVar = 5;
trace(myVar);

Если этот экземпляр создаётся (что ты проверишь вышеприведённым кодом), то у него есть имя. Вот имя этого экземпляра тебе н.б. выяснить. И по имени обращаться к свойству (одним из двух способов, что я описал ранее).
Вернуться в начало страницы
 
+Ответить с цитированием данного сообщения
HaWK
сообщение 18.10.2010 - 01:11
Сообщение #7


Моdератор
****

Группа: Пользователь
Сообщений: 874
Регистрация: 12.03.2008
Пользователь №: 4145



ML!
Цитата
Откуда ты знаешь, что он создаётся? Если ты об этом читал в какой-либо документации, то там и прочитай о том, как к данному экземпляру обратиться.

Не нужно читать об этом, об этом уже пора знать. В AS3 совсем другая структура. Если допустим в AS2 я мог на руте объявить переменную и потом обращаться к ней с любого места программы просто через _root.myVar, то в AS3 так уже не получится. _root - теперь это класс документа и фиг знает как к нему обратится извне (с других классов). Если внутри него я ещё могу читать его же свойства, то извне не могу. Вот мне и надо выяснить как это делать, поэтому я создал тему.

Если бы мне просто надо было получить свойство я бы не писал здесь. Мне надо получить свойство класса документа (то бишь _root) из другого класса.
Вернуться в начало страницы
 
+Ответить с цитированием данного сообщения
chingachgoog
сообщение 18.10.2010 - 12:13
Сообщение #8


Ветеран конференции
****

Группа: Пользователь
Сообщений: 777
Регистрация: 27.02.2009
Из: Moscow
Пользователь №: 9144



Цитата(HaWK @ 18.10.2010 - 02:11) *
Если допустим в AS2 я мог на руте объявить переменную и потом обращаться к ней с любого места программы просто через _root.myVar, то в AS3 так уже не получится.


Да ну?
В конструкторе класса Документа пишем
Код
trace("Main "+(this==root))

И смотрим результат.

tongue.gif
Вернуться в начало страницы
 
+Ответить с цитированием данного сообщения
HaWK
сообщение 18.10.2010 - 12:22
Сообщение #9


Моdератор
****

Группа: Пользователь
Сообщений: 874
Регистрация: 12.03.2008
Пользователь №: 4145



Ладно, я в курсе этого. Но почему когда я пишу в другом классе:
Код
trace(root.myVar);

Получаю:
1120: Обращение несуществующего свойства root.

? ? ?
Вернуться в начало страницы
 
+Ответить с цитированием данного сообщения
chingachgoog
сообщение 18.10.2010 - 12:28
Сообщение #10


Ветеран конференции
****

Группа: Пользователь
Сообщений: 777
Регистрация: 27.02.2009
Из: Moscow
Пользователь №: 9144



А в другом классе вообще может не быть свойства root, если это не потомок DisplayObject, либо оно может быть равным null.
Вернуться в начало страницы
 
+Ответить с цитированием данного сообщения
HaWK
сообщение 18.10.2010 - 12:29
Сообщение #11


Моdератор
****

Группа: Пользователь
Сообщений: 874
Регистрация: 12.03.2008
Пользователь №: 4145



А как обратится к свойству экземпляра класса документа из другого класса?
Вернуться в начало страницы
 
+Ответить с цитированием данного сообщения
chingachgoog
сообщение 18.10.2010 - 12:34
Сообщение #12


Ветеран конференции
****

Группа: Пользователь
Сообщений: 777
Регистрация: 27.02.2009
Из: Moscow
Пользователь №: 9144



Передать в этот другой класс ссылку на себя при построении, например.

Типа:

// Из класса Документа
// var otherClass:OtherClass=new OtherClass(this)
Вернуться в начало страницы
 
+Ответить с цитированием данного сообщения
HaWK
сообщение 18.10.2010 - 12:35
Сообщение #13


Моdератор
****

Группа: Пользователь
Сообщений: 874
Регистрация: 12.03.2008
Пользователь №: 4145



эээ.... и как всё это должно работать?
Как мне потом обращаться из этого другого класса?

Сообщение отредактировал HaWK - 18.10.2010 - 12:38
Вернуться в начало страницы
 
+Ответить с цитированием данного сообщения
chingachgoog
сообщение 18.10.2010 - 12:41
Сообщение #14


Ветеран конференции
****

Группа: Пользователь
Сообщений: 777
Регистрация: 27.02.2009
Из: Moscow
Пользователь №: 9144



Код
package {
    import flash.display.*
    
    public class Main extends Sprite {
        public const DELTA="qewqw"
        public function Main(){
            var z=new A(this)
            z.use1()
        }
    }
}


Код
package {    
    public class A {
        var pat
        public function A(par){
            pat=par
        }
        public function use1(){
            trace("суперкласс "+pat.DELTA)
        }
    }            
}


Можно так. Можно в Main статическое свойство сделать с ссылкой на свой единственный экземпляр. Много способов.

PS

Кстати в AS1/2 _root может быть также не единственным.
Вернуться в начало страницы
 
+Ответить с цитированием данного сообщения
HaWK
сообщение 18.10.2010 - 12:46
Сообщение #15


Моdератор
****

Группа: Пользователь
Сообщений: 874
Регистрация: 12.03.2008
Пользователь №: 4145



Вообще у меня конструктор другого класса занят другими параметрами, а тут в качестве параметра конструктору передаётся экземпляр документа класса. Всё так запутанно, лучше другие способы smile.gif, или это лучший?
Вернуться в начало страницы
 
+Ответить с цитированием данного сообщения
chingachgoog
сообщение 18.10.2010 - 12:54
Сообщение #16


Ветеран конференции
****

Группа: Пользователь
Сообщений: 777
Регистрация: 27.02.2009
Из: Moscow
Пользователь №: 9144



Цитата(HaWK @ 18.10.2010 - 13:46) *
тут в качестве параметра конструктору передаётся экземпляр документа класса.


Не экземпляр класса документа, а ссылка на экземпляр.
Второй способ я сказал. Третий и кувырнадцатый найдет тот кто ищет )))
Вернуться в начало страницы
 
+Ответить с цитированием данного сообщения
HaWK
сообщение 18.10.2010 - 22:37
Сообщение #17


Моdератор
****

Группа: Пользователь
Сообщений: 874
Регистрация: 12.03.2008
Пользователь №: 4145



Я так понял лучше сделать так:
public static var prop:DisplayObject = this;

И потом обращаться в любом классе:
Main.prop.myvar

Хотя я ещё не пробовал, но надеюсь сработает
Вернуться в начало страницы
 
+Ответить с цитированием данного сообщения
HaWK
сообщение 19.10.2010 - 11:49
Сообщение #18


Моdератор
****

Группа: Пользователь
Сообщений: 874
Регистрация: 12.03.2008
Пользователь №: 4145



Да... ни фига не получилось.
Вот:
1042: Ключевое слово "this" не может использоваться в статических методах. Оно может использоваться только в методах экземпляра, в закрытии функций и в глобальных кодах.
Вернуться в начало страницы
 
+Ответить с цитированием данного сообщения
chingachgoog
сообщение 19.10.2010 - 12:03
Сообщение #19


Ветеран конференции
****

Группа: Пользователь
Сообщений: 777
Регистрация: 27.02.2009
Из: Moscow
Пользователь №: 9144



Цитата(HaWK @ 19.10.2010 - 12:49) *
Да... ни фига не получилось.
Вот:
1042: Ключевое слово "this" не может использоваться в статических методах. Оно может использоваться только в методах экземпляра, в закрытии функций и в глобальных кодах.


Все правильно, в статических МЕТОДАХ как же можно использовать this?
Статические методы и свойства - это методы и свойства класса.

public static var prop:DisplayObject // просто объявляем
а вот в конструкторе класса уже вставим значение this:
prop=this
Вернуться в начало страницы
 
+Ответить с цитированием данного сообщения
HaWK
сообщение 19.10.2010 - 12:09
Сообщение #20


Моdератор
****

Группа: Пользователь
Сообщений: 874
Регистрация: 12.03.2008
Пользователь №: 4145



Ошибочка:
trace(Main.prop.myVar);
1119: Обращение возможного неопределенного свойства myVar через ссылку со статическим типом flash.display:DisplayObject .
Вернуться в начало страницы
 
+Ответить с цитированием данного сообщения

2 страниц V   1 2 >
Ответить в эту темуОткрыть новую тему
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 



- Текстовая версия Сейчас: 5.11.2010 - 17:01