特定の集団を管理するためのPartyオブジェクトについて説明します。
- DOWNLOAD
概要
Partyは集団を管理したり、内包する集団に同一の作業を実施したりする機能を提供します。
例えばPartyの全員の死亡を確認したり、全員の状態を変更したりします。
Partyは配列を継承し、Objectを要素として持つことにします。
繰り返し
Partyのメンバーに対して実施したい作業を一つ一つ実装していっても良いのですが、同じような記述がいっぱい増えるだけなのでJavascriptらしい方法でまとめたいと思います。
Javascriptの場合、メソッドも連想配列の要素の一つなのでこれを利用して任意のメソッドを実行します。
Party.prototype.each = function (command, to) { /// <summary> /// 要素全てに commandを実行する /// </summary> /// <param name="command" type="string"> /// 実行するメソッド名を指定 /// </param> /// <param name="to" type="Array"> /// commandへ渡す引数を配列で指定 /// </param> if (!this.length) { return false; } var result = true; for (var i = 0; i < this.length; i++) { if (!this[i][command].apply(this[i], to)) { result = false; } } return result; }
使い方
var party = new Party(); party.push( new Player() ); party.each('isDead');
拡張
ついでにObjectが持つメソッドのみではなく任意の関数も実行できるように拡張しておきます。
Party.prototype.each = function (command, to) { /// <summary> /// 要素全てに commandを実行する /// </summary> /// <param name="command" type="string/function"> /// 実行するメソッド名を指定 /// </param> /// <param name="to" type="Array"> /// commandへ渡す引数を配列で指定 /// </param> if (!this.length) { return false; } var result = true;
if (typeof command is function) { for (var i = 0; i < this.length; i++) { if (!this[i][command].apply(this[i], to)) { result = false; } } } else { for (var i = 0; i < this.length; i++) { if (!this[i][command].apply(this[i], to)) { result = false; } } } return result; }