понеділок, 27 грудня 2010 р.

а тепер по ділу

головний клас проекту:

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 - #@%$%@^%$.
і лінії - теж.


гррррр!

6 коментарів:

  1. RTFM! Вся проблема в тому, що ти присвоюєш змінним суперкласу значення до того як ініціюєш суперклас.
    Викликай будь-ласка конструктор суперкласу super() в самому початку функції конструктора :)

    ВідповістиВидалити
  2. логічно, кеп. тільки мені потрібно це зробити перед виконанням конструктора. ну вот раптом треба - і все, без можливості міняти архітектуру.

    а чому типізований аррей значення зберігає, а нетипізований - ні? чому обжект - ні, а клас Point - так?

    ВідповістиВидалити
  3. Тобі раптом треба змінювати властивості об'єкта до його створення? Кеп тут сказав би щось інше.

    Гадати чому різні типи даних по різному тут ініціюються, я думаю, не потрібно, тому що мануал пише що super() треба завжди ставити на початку.

    ВідповістиВидалити
  4. super викличе конструктор батьківського класу, який вже виконає якісь дії, запустить лайфцайкл компоненти і т.п., які використовують якісь філди, і не завжди в супер можна передати параметри, які проініціалізують ці філди, а часто я не можу міняти логіку і архітектуру класів, від яких наслідуюсь (проект, в який я прийшла не з початку, чужі ліби і фреймворки і т.п.). ну вот у коді самих адобівців є така ініціалізація mx.automation.delegates.controls.AlertFormAutomationImpl. навіть в java, в якій компілятор не дає прописати щось перед супером часто (в J2ME) потрібно було проініціалізувати якесь поле перед викликом супера.


    ну і мені просто цікаво (вот просто і банально, але дуже цікаво) - що відбувається з пам'яттю? чому примітивні і не дінамік класи ініціалізуються, а невизначені і динамічні класи - ні?

    ВідповістиВидалити
  5. ну, можливо тому що в динамічних менша швидкість доступу

    ВідповістиВидалити