Staticメソッドの呼び出し

 fladdict.netさんと同じ現象かなと思うんだけど,どうもフルパッケージ名でしていするのとしないのとで挙動が変わる…
なんでだろ…??

ちょっと試してないソースだから動くか分からないけどこんな感じ.

// [class Parent]
class package.Parent {
  private static var initFlag:Boolean = Parent. initialize();

  private static function initialize():Boolean {
    trace('Parent.initialize() called.');
    return true;
  }
}

// [class Child]
import package.*;
class package.Child extends Parent{
  private static var initFlag:Boolean = Child.initialize();

  private static function initialize():Boolean {
    trace('Child.initialize() called.');
    return true;
  }
}

// フレーム
package.Parent;
package.Child;

// 結果
// Parent.initialize() called.
// Parent.initialize() called.

これで実行させるとクラスが呼び出されたときにinitializeをやってくれるんだけど,どうもパッケージ名を指定して書くと親のstaticメソッドしか呼ばれない…

これをパッケージとかクラス名を指定せずに

// [class Parent]
class package.Parent {
  private static var initFlag:Boolean = initialize(); // ここ変えた

  private static function initialize():Boolean {
    trace('Parent.initialize() called.');
    return true;
  }
}

// [class Child]
import package.*;
class package.Child extends Parent{
  private static var initFlag:Boolean = initialize(); // ここ変えた

  private static function initialize():Boolean {
    trace('Child.initialize() called.');
    return true;
  }
}

// 結果
// Parent.initialize() called.
// Child.initialize() called.

とかやると期待通り…
むしろ逆な気もするけど…
8からじゃないよね??
んー,なんでだぁー!ヽ(`Д´)ノガー

追記)
8からじゃないや...

さらに追記)
AS1.0で書くとこういうことですよね??>だれ?

// パッケージ空間作成
_global.package = {};

// class Parent
_global.package.Parent = function() {
};

_global.package.Parent.initialize = function() {
  trace('Parent.initialize() called.');
};

_global.package.Parent.initFlag = _global.package.Parent.initialize();


// class Child
_global.package.Child = function() {
};

_global.package.Child.prototype = new _global.package.Parent();

_global.package.Child.initialize = function() {
  trace('Child.initialize() called.');
};

_global.package.Child.initFlag = _global.package.Child.initialize();

// 出力
// Parent.initialize() called.
// Child.initialize() called.

んー,期待通り.(._・)>?


contributor nao : 2005年10月17日 02:08

trackback

trackback for this entry URL:
http://blog.graffiti-web.org/mt/mt-tb.cgi/332

comment