Форум Flasher.ru
Ближайшие курсы в Школе RealTime
Список интенсивных курсов: [см.]  
  
Специальные предложения: [см.]  
  
 
Блоги Правила Справка Пользователи Календарь Сообщения за день
 

Вернуться   Форум Flasher.ru > Flash > ActionScript 3.0

Версия для печати  Отправить по электронной почте    « Предыдущая тема | Следующая тема »  
Опции темы Опции просмотра
 
Создать новую тему  
Старый 22.10.2013, 14:09
Fogflasher вне форума Посмотреть профиль Отправить личное сообщение для Fogflasher Найти все сообщения от Fogflasher
  № 1  
Ответить с цитированием
Fogflasher

Регистрация: Mar 2013
Сообщений: 290
Post Композиция: обращение вверх по иерархии

Всем привет.

Вот здесь Wolsh вкратце описал принципы видимости свойств и методов.

Однако, некоторые практические следствия из этого мне неочевидны.

Рассмотрим на примере. Есть два класса ClassA (он же документ-класс), и ClassB.
ClassA содержит в себе экземпляр ClassB, то есть получаем простейший пример композиции.

ClassA.as:
Код AS3:
package
{
	import flash.display.*;
 
	//--- ClassA ---//
	public class ClassA extends Sprite
	{
		public var classA_sv1:String = "Свойство1 класса А";
 
		//--- Constructor ---//
		public function ClassA()
		{
 
			trace("<<< Экземпляр класса ClassA создан >>>");
 
			classB = new ClassB(); //создаем экземпляр класса B
			trace(classB.classB_get(2)); //обращаемся к свойствам ClassB через его же метод
 
		//--- Method: classA_get() ---//
		public function classA_get()
		{
			trace("Возвращено:");
			return classA_sv1;
		}
 
	}
 
 
}
ClassB.as:
Код AS3:
package
{
	import flash.display.*;
 
	//--- ClassB ---//
	public class ClassB extends Sprite
	{
 
		private var classB_sv1:String = "Свойство1_класса_B";
		private var classB_sv2:String = "Свойство2_класса_B";
 
		//--- Constructor ---//
		public function ClassB()
		{
 
			trace("((( Экземпляр класса ClassB создан )))");
 
 
		}
		//--- Method: classB_get() ---//
		public function classB_get(n:uint):String
		{
 
			if (n == 1)
			{
				trace("Возвращено:");
				return classB_sv1;
 
			}
			else if (n == 2)
			{
				trace("Возвращено:");
				return classB_sv2;
 
			}
			else
			{
				trace("Возвращено:");
			}
 
			return "Cвойство неопределено";
 
		}
	}
 
}
В такой форме всё работает, и мы получаем:
Цитата:
<<< Экземпляр класса ClassA создан >>>
((( Экземпляр класса ClassB создан )))
Возвращено:
Свойство2_класса_B
А теперь, например, нужно реализовать еще две задачи, связанные с обращением "снизу вверх".

1. Обратиться из конструктора ClassB к свойству classA_sv1 (или методу classA_get()) класса ClassA.
2. Обратиться из конструктора ClassB к самому экземпляру ClassA.

1. По первой задаче, я пробовал в конструкторе ClassB вот такие строки:
Код AS3:
trace("classA_sv1 = ", classA_sv1); //ERROR: 1120: Access of undefined property classA_sv1.
trace("classA_sv1 = ", classA_get()); //ERROR: 1180: Call to a possibly undefined method classA_get.
C соответвующими результатами в комментариях.

2. По второй задаче, у меня что-то даже нет идей. Имя экземпляра документ-класса мы не знаем...
Вероятно, нужны какие-то специальные приемы, типа оператора super().

Создать новую тему   Часовой пояс GMT +4, время: 11:45.
Быстрый переход
  « Предыдущая тема | Следующая тема »  

Теги
видимость , классы , композиция , методы , свойства

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.


 


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


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