![]() |
Здравствуйте, гость ( Вход | Регистрация )
![]() |
![]() ![]()
Сообщение
#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
|
|
Ветеран конференции ![]() ![]() ![]() ![]() Группа: 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, то этого нельзя было бы сделать (ни прочитать, ни записать напрямую), и для записи нужно было бы сделать соответствующий метод. |
|
|
![]()
Сообщение
#3
|
|
![]() Моdератор ![]() ![]() ![]() ![]() Группа: Пользователь Сообщений: 874 Регистрация: 12.03.2008 Пользователь №: 4145 ![]() |
Вообще экземпляр класса документа создаётся только один раз, MustLive. Мне нудно получить именно из него это свойство.
Ты в курсе что такое класс документа? Сообщение отредактировал HaWK - 16.10.2010 - 16:30 |
|
|
![]()
Сообщение
#4
|
|
Ветеран конференции ![]() ![]() ![]() ![]() Группа: Flash Zone Team Сообщений: 3912 Регистрация: 10.03.2005 Из: Киев Пользователь №: 5 ![]() |
Цитата Вообще экземпляр класса документа создаётся только один раз, MustLive. Мне нудно получить именно из него это свойство. HaWK Ну раз создался у тебя один раз экземпляр, то и считывай из него свойства. Как это сделать, я описал выше. Класс документа ты описал как class Main (т.е. я понял, что это какой-то твой класс). Вот я и привёл пример кода для работы с ним. Если это какой-то стандартный класс (а с классами AS3 я не знаком), поставляемый с флешем, то почитай его документацию или изучи исходник (если нет возможности/времени/желания читать документацию), и воспользуйся теми способами, что я описал выше. И прочитаешь значение этого свойства. |
|
|
![]()
Сообщение
#5
|
|
![]() Моdератор ![]() ![]() ![]() ![]() Группа: Пользователь Сообщений: 874 Регистрация: 12.03.2008 Пользователь №: 4145 ![]() |
Да это мой класс. И его экземпляр создаётся один раз (самим Flash). Вот как к нему обратится я не знаю.
|
|
|
![]()
Сообщение
#6
|
|
Ветеран конференции ![]() ![]() ![]() ![]() Группа: Flash Zone Team Сообщений: 3912 Регистрация: 10.03.2005 Из: Киев Пользователь №: 5 ![]() |
Цитата И его экземпляр создаётся один раз (самим Flash). Вот как к нему обратится я не знаю. Откуда ты знаешь, что он создаётся? Если ты об этом читал в какой-либо документации, то там и прочитай о том, как к данному экземпляру обратиться. Чтобы проверить, что флеш автоматически создаёт экземпляр класса Main, возьми в конструкторе класса (function Main()) выведи трейс (за myVar), чтобы получить результат в окне Output: Код myVar = 5; trace(myVar); Если этот экземпляр создаётся (что ты проверишь вышеприведённым кодом), то у него есть имя. Вот имя этого экземпляра тебе н.б. выяснить. И по имени обращаться к свойству (одним из двух способов, что я описал ранее). |
|
|
![]()
Сообщение
#7
|
|
![]() Моdератор ![]() ![]() ![]() ![]() Группа: Пользователь Сообщений: 874 Регистрация: 12.03.2008 Пользователь №: 4145 ![]() |
ML!
Цитата Откуда ты знаешь, что он создаётся? Если ты об этом читал в какой-либо документации, то там и прочитай о том, как к данному экземпляру обратиться. Не нужно читать об этом, об этом уже пора знать. В AS3 совсем другая структура. Если допустим в AS2 я мог на руте объявить переменную и потом обращаться к ней с любого места программы просто через _root.myVar, то в AS3 так уже не получится. _root - теперь это класс документа и фиг знает как к нему обратится извне (с других классов). Если внутри него я ещё могу читать его же свойства, то извне не могу. Вот мне и надо выяснить как это делать, поэтому я создал тему. Если бы мне просто надо было получить свойство я бы не писал здесь. Мне надо получить свойство класса документа (то бишь _root) из другого класса. |
|
|
![]()
Сообщение
#8
|
|
![]() Ветеран конференции ![]() ![]() ![]() ![]() Группа: Пользователь Сообщений: 777 Регистрация: 27.02.2009 Из: Moscow Пользователь №: 9144 ![]() |
|
|
|
![]()
Сообщение
#9
|
|
![]() Моdератор ![]() ![]() ![]() ![]() Группа: Пользователь Сообщений: 874 Регистрация: 12.03.2008 Пользователь №: 4145 ![]() |
Ладно, я в курсе этого. Но почему когда я пишу в другом классе:
Код trace(root.myVar); Получаю: 1120: Обращение несуществующего свойства root. ? ? ? |
|
|
![]()
Сообщение
#10
|
|
![]() Ветеран конференции ![]() ![]() ![]() ![]() Группа: Пользователь Сообщений: 777 Регистрация: 27.02.2009 Из: Moscow Пользователь №: 9144 ![]() |
А в другом классе вообще может не быть свойства root, если это не потомок DisplayObject, либо оно может быть равным null.
|
|
|
![]()
Сообщение
#11
|
|
![]() Моdератор ![]() ![]() ![]() ![]() Группа: Пользователь Сообщений: 874 Регистрация: 12.03.2008 Пользователь №: 4145 ![]() |
А как обратится к свойству экземпляра класса документа из другого класса?
|
|
|
![]()
Сообщение
#12
|
|
![]() Ветеран конференции ![]() ![]() ![]() ![]() Группа: Пользователь Сообщений: 777 Регистрация: 27.02.2009 Из: Moscow Пользователь №: 9144 ![]() |
Передать в этот другой класс ссылку на себя при построении, например.
Типа: // Из класса Документа // var otherClass:OtherClass=new OtherClass(this) |
|
|
![]()
Сообщение
#13
|
|
![]() Моdератор ![]() ![]() ![]() ![]() Группа: Пользователь Сообщений: 874 Регистрация: 12.03.2008 Пользователь №: 4145 ![]() |
эээ.... и как всё это должно работать?
Как мне потом обращаться из этого другого класса? Сообщение отредактировал HaWK - 18.10.2010 - 12:38 |
|
|
![]()
Сообщение
#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 может быть также не единственным. |
|
|
![]()
Сообщение
#15
|
|
![]() Моdератор ![]() ![]() ![]() ![]() Группа: Пользователь Сообщений: 874 Регистрация: 12.03.2008 Пользователь №: 4145 ![]() |
Вообще у меня конструктор другого класса занят другими параметрами, а тут в качестве параметра конструктору передаётся экземпляр документа класса. Всё так запутанно, лучше другие способы
![]() |
|
|
![]()
Сообщение
#16
|
|
![]() Ветеран конференции ![]() ![]() ![]() ![]() Группа: Пользователь Сообщений: 777 Регистрация: 27.02.2009 Из: Moscow Пользователь №: 9144 ![]() |
|
|
|
![]()
Сообщение
#17
|
|
![]() Моdератор ![]() ![]() ![]() ![]() Группа: Пользователь Сообщений: 874 Регистрация: 12.03.2008 Пользователь №: 4145 ![]() |
Я так понял лучше сделать так:
public static var prop:DisplayObject = this; И потом обращаться в любом классе: Main.prop.myvar Хотя я ещё не пробовал, но надеюсь сработает |
|
|
![]()
Сообщение
#18
|
|
![]() Моdератор ![]() ![]() ![]() ![]() Группа: Пользователь Сообщений: 874 Регистрация: 12.03.2008 Пользователь №: 4145 ![]() |
Да... ни фига не получилось.
Вот: 1042: Ключевое слово "this" не может использоваться в статических методах. Оно может использоваться только в методах экземпляра, в закрытии функций и в глобальных кодах. |
|
|
![]()
Сообщение
#19
|
|
![]() Ветеран конференции ![]() ![]() ![]() ![]() Группа: Пользователь Сообщений: 777 Регистрация: 27.02.2009 Из: Moscow Пользователь №: 9144 ![]() |
Да... ни фига не получилось. Вот: 1042: Ключевое слово "this" не может использоваться в статических методах. Оно может использоваться только в методах экземпляра, в закрытии функций и в глобальных кодах. Все правильно, в статических МЕТОДАХ как же можно использовать this? Статические методы и свойства - это методы и свойства класса. public static var prop:DisplayObject // просто объявляем а вот в конструкторе класса уже вставим значение this: prop=this |
|
|
![]()
Сообщение
#20
|
|
![]() Моdератор ![]() ![]() ![]() ![]() Группа: Пользователь Сообщений: 874 Регистрация: 12.03.2008 Пользователь №: 4145 ![]() |
Ошибочка:
trace(Main.prop.myVar); 1119: Обращение возможного неопределенного свойства myVar через ссылку со статическим типом flash.display:DisplayObject . |
|
|
![]() ![]() |
![]() |
Текстовая версия | Сейчас: 5.11.2010 - 17:01 |