головний клас проекту:
public class Main extends Sprite {
public function Main(): void {
if(stage) {
init();
} else {
addEventListener(Event.ADDED_TO_STAGE, init);
}
}
private function init(event: Event = null): void {
removeEventListener(Event.ADDED_TO_STAGE, init);
var test: TestChild = new TestChild();
}
}
клас TestChild
public class TestChild extends TestParent {
public function TestChild() {
data = [1, 2, 3, 4];
arr = [11, 22, 33, 44];
obj = {name: "Test", value: "ttt"};
intNum = 24;
floatNum = Math.PI;
point = new Point(7, 13);
str = "Svitovyda";
super();
trace(this, data);
trace(this, arr);
trace(this, obj);
trace(this, intNum);
trace(this, floatNum);
trace(this, point);
trace(this, str);
}
}
клас TestParent
public class TestParent {
protected var data: * ;
protected var arr: Array;
protected var obj: Object;
protected var intNum: int;
protected var floatNum: Number;
protected var point: Point;
protected var str: String;
public function TestParent() {
trace(data);
trace(arr);
trace(obj);
trace(intNum);
trace(floatNum);
trace(point);
trace(str);
}
}
результат запуску в трейсі:
undefined
11,22,33,44
null
24
NaN
(x=7, y=13)
Svitovyda
[object TestChild] undefined
[object TestChild] 11,22,33,44
[object TestChild] null
[object TestChild] 24
[object TestChild] NaN
[object TestChild] (x=7, y=13)
[object TestChild] Svitovyda
якби мені хтось пояснив це, була б дуже вдячна. а так: Flash - #@%$%@^%$.
а ще скажу банальність: 9scaleGrid - #@%$%@^%$.
і лінії - теж.
гррррр!
RTFM! Вся проблема в тому, що ти присвоюєш змінним суперкласу значення до того як ініціюєш суперклас.
ВідповістиВидалитиВикликай будь-ласка конструктор суперкласу super() в самому початку функції конструктора :)
логічно, кеп. тільки мені потрібно це зробити перед виконанням конструктора. ну вот раптом треба - і все, без можливості міняти архітектуру.
ВідповістиВидалитиа чому типізований аррей значення зберігає, а нетипізований - ні? чому обжект - ні, а клас Point - так?
Тобі раптом треба змінювати властивості об'єкта до його створення? Кеп тут сказав би щось інше.
ВідповістиВидалитиГадати чому різні типи даних по різному тут ініціюються, я думаю, не потрібно, тому що мануал пише що super() треба завжди ставити на початку.
Автор видалив цей коментар.
ВідповістиВидалитиsuper викличе конструктор батьківського класу, який вже виконає якісь дії, запустить лайфцайкл компоненти і т.п., які використовують якісь філди, і не завжди в супер можна передати параметри, які проініціалізують ці філди, а часто я не можу міняти логіку і архітектуру класів, від яких наслідуюсь (проект, в який я прийшла не з початку, чужі ліби і фреймворки і т.п.). ну вот у коді самих адобівців є така ініціалізація mx.automation.delegates.controls.AlertFormAutomationImpl. навіть в java, в якій компілятор не дає прописати щось перед супером часто (в J2ME) потрібно було проініціалізувати якесь поле перед викликом супера.
ВідповістиВидалитину і мені просто цікаво (вот просто і банально, але дуже цікаво) - що відбувається з пам'яттю? чому примітивні і не дінамік класи ініціалізуються, а невизначені і динамічні класи - ні?
ну, можливо тому що в динамічних менша швидкість доступу
ВідповістиВидалити