feb19.jp

Nobuhiro Takahashi
Designer / Engineer

プロトタイプベースのクラス拡張

プロトタイプベースのクラス拡張

ActionScript1.0と2.0を見直したい。1.0と2.0は書き方は多少違えど、内部で同じ形式に変換してるわけだから、1.0で書かれているプロトタイプ拡張用.asファイルを#includeして使うなんて使い方ができるわけで。

すでにウェブ上には様々なプロトタイプの実装方法やらの議論がされているこの3.0全盛時代に1.0を見直してみる俺。とりあえず仕事が早く終わるように、締め切りに間に合うように、開いた時間を活用してライブラリで武装を整えておこうという魂胆です。2.0以下案件ばっかなんだし。てか1.0/2.0を見直してりゃ3.0なんて多分楽勝なんだ。きっと。

で、まず1.0。1.0はプロトタイプベースのクラス定義がおこなえるので(むしろこれまでなんだけど)、StringやMathやObject、MovieClipなどビルトインクラスにプロパティやメソッドをダイナミックに追加が可能。

たとえばこの間の配列をシャッフルするというメソッドを作る場合以下のような実装が可能。

Array.prototype.shuffle = function(){
	var l = this.length;
	var newArr = arr;
	while(l){
		m = Math.floor(Math.random()*l);
		n = newArr[--l];
		newArr[l] = newArr[m];
		newArr[m] = n;
	}
	return newArr;
}

こうすると、arr.shuffle();だけでシャッフルされた配列が戻ってくる。上の関数をコピペして好きな名前で保存する。例えば"feb19array.as"なんて名前で作成したとする。このとき、上記コードはAS1.0だけども、AS2.0で作られたプロジェクトの.flaファイルの1フレーム目にinclude "feb19array.as"と記述する。そうすると、AS2.0上でこの拡張メソッドを利用する事が可能。

とはいえこの方法は直接ビルトインクラスを拡張しているので非常に危険です。一人で作業を行っている分には全然良いのですが、複数人数で汚染し合ってしまう可能性があったり、また読みにくくなっていってしまうという事も。

そこでおすすめなのが前回説明した方法であって、static publicと重ねる事で、ExArray.shuffle(arr)とする方法。コードの汚染を極力押さえる事が可能です。

つまりこのエントリーはあまりよくない例っていうことなのです。。

Tweet Share Bookmark

Navigation

prev: Adobe Flash CS3 詳細! ActionScript 3.0 入門ノート
next: Flashで作られたユーザーインターフェースと使い勝手

Recently Entries