AS2のprototypeを強化してみた

AS3どやねんとか言ってる間に、こんどはAS4だそうですが、じっさいは、FlashPlayerのレギュレーションが8を超える案件ってどのぐらいあるんだろうかと疑問だったりします。「9使っていいよ」はだいぶ増えてきたかもしれないけど、じゃあ、AS3が本当に必要な案件となると、どうでしょ?

そう考えると、AS2の存在感はまだまだ大きいのではないでしょうか。スクリプトの速度が要らないものなら、AS3なんていう意味のない型強制を持った言語を使うより、型指定要らずでAjax仕事と同じ感覚でやれるAS2のほうが楽だし。

ただ、AS2はAPIがぜんぜん足りないうえ、もう成長しないわけで…。成長しないことが確定なら、自分で勝手に拡張して使ってもいいのかなと思い、ObjectとかArrayのprototypeにいろいろ差し込みました。

高階関数の基本APIとか、Pythonのreprとか、

var arr_src = [
  {id:1, val:1},
  {id:2, val:2},
  {id:3, val:3}
];
var arr_dest = arr.map(function(e){
  return { id:e.id, val:e.val + 1 }
});
trace(arr_dest.repr());
// [{id:1,val:2},{id:2,val:3},{id:3,val:4}] would be shown
// instead of [object Object].

オブジェクトからメソッド取り出したときthisがなくなるのを解決するとか、カリー化とか、

var obj = { base: 5 }
obj.my_add = function(a, b) {
  return a + b + (this && this.base ? this.base : 0);
}
var my_add3 = obj.my_add.partial(obj, 3);
trace(my_add3(2)); // 10

非同期APIと同期処理の関係の反転とか、(例なし)

ムービークリップにマルチなイベントリスナとか、

mc.onRelease = function(){ trace("a"); };
mc.bind("release", function(){ trace("b"); }, "trace_b");
mc.bind("release", function(){ trace("c"); }, "trace_c");
//...
mc.unbind("release", "trace_b");
// trace("a") and trace("c") is alive.

やってはみたものの、ソースの置き場/ライセンスをどうしたものか思案中。