« AS2 to AS3 migration(JP) | Main | wmode(JP) »

flash_proxy PART1(JP)

Proxyというのは、そもそも実際の処理を代行するもので自分の中で処理できない内容はクラスの後ろに設定してある実体にその処理を任せる。flash_proxyはネームスペースという考え方が入っているので若干複雑かもしれないが、この機能を使うと実際には作っていない(未定義の)メソッドやプロパティを呼び出すことが出来る。例えば、実行時に何か変数を列挙したドキュメントを読み込んだりすることはよくあるが、この変数が既に定義されていたかのように取り出すことが出来たり、他のクラスの関数を自分の中に定義されているかのように振る舞うことが出来る。

callProperty
この例では_targetというオブジェクトにmovieclipという実体が設定されている前提になっている。movieclipなら実際はどんなメソッドがあるのか分かるし、直接呼んでも問題はないが、実行時に新たに誰かが設定したメソッドがあるとしたら、それを実体に対して呼び出すことは出来ない。実体でメソッドが未定義だったら他のオブジェクトのメソッドを実行するということも出来る。proxyという存在でワンクッション置いてあるので後ろの実際には表面から見えない実装が柔軟になるのである。

dynamic class ExProxy extends Proxy{
  var _target:Object;
  flash_proxy override function callProperty(method:*, ...param):*{
     _target[method].apply(_target, param);//_target.method(p1,p2..)のように実行
  }
}
exProxy.gotoAndStop(1);//_funcにmovieclipが設定されている仮定

getProperty
前述の例どおり、読み込んだテキストから変数をセットすることは出来ない。読み込んだデータが入ったオブジェクトの中の変数を直接呼んでいるかのようにアクセスできると便利である。

dynamic class ExProxy extends Proxy{
  var _data:Object;
  flash_proxy override function getProperty(name:*):*{
     return _data[name];
  }
}
trace(exProxy.name);//EXProxyクラスにないプロパティを要求しても正しい結果

Post a comment