カスタムクラスのインスタンスをtraceした時に配列のように内容を出力したい


久々に。仕事がてんてこまいだったのがようやく落ち着いてきました。

表題の件、ずっとできるはず、と思いながらうまく行かなかったのですが、ある時ふと思い立って調べ直してみたらうまく行ったのでメモ。

SpriteやMovieClipを拡張して作るときは、toString()をoverrideして、戻り値を書き出したい値にすればできる様子。

ただ、Objectを拡張しただけのクラス(何もextendsしてないクラス)だとこれだとできない。

Error: Method marked override must override another method.

みたいに怒られます。

どうしたらいいものかと思ってたんですが、直に

public class Hoge {
    public var name:String;
    public var text:String;
    public function toString():String {
        return '['+[name, text]+']';
    }
}

と書けばちゃんとtraceした時にtoStringとして動作するようです。いろいろ調べてみたらtoStringはObjectのObject.prototype.toStringとして書かれているというような記述がありました。

参考:Adobe ActionScript 3.0 * 高度なトピック

真似してみたらこれでもできた。

public class Hoge {
    public var name:String;
    public var text:String;
    prototype.toString = function():String {
        return '['+[this.name, this.text]+']';
    }
}
//----------
var hoge:Hoge = new Hoge();
hoge.name = 'nameTest';
hoge.text = 'textTest';
trace(hoge);  //[nameTest,textTest]

prototypeオブジェクトについてもうちょっと調べてみようと思います。