Всем привет.
Вот
здесь 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().