ObjectRangeクラス
【抜粋】 ObjectRange = Class.create(); Object.extend(ObjectRange.prototype, Enumerable); Object.extend(ObjectRange.prototype, { initialize: function(start, end, exclusive) { this.start = start; this.end = end; this.exclusive = exclusive; }, _each: function(iterator) { var value = this.start; do { iterator(value); value = value.succ(); } while (this.include(value)); }, include: function(value) { if (value < this.start) return false; if (this.exclusive) return value < this.end; return value <= this.end; } });
整数の数値範囲を表すオブジェクトです。
Class.create()でクラスを作成し、Enumerableクラスを継承後、initializeメソッドおよび他のメソッドを追加しています。
initializeメソッド
引数のstart,end,exclusiveをそれぞれ自オブジェクトのプロパティにセットします。exclusiveは範囲がendを含まない(未満)であればtrue、含む(以下)であればfalseを指定します。
_eachメソッド
継承したEnumerableクラスにおいて、抽象メソッド扱いになっているメソッドの実装です。startプロパティの値からインクリメント*1しながら、iteratorに渡して実行します。do while文なので一度は実行されます。値が自オブジェクトの表す範囲内であれば続行します。includeメソッドは次です。
includeメソッド
valueが自オブジェクトの表す範囲内であればtrue、でなければfalseを返却します。
【例】 var objR1 = new ObjectRange(-2, 3, true); var objR2 = new ObjectRange(2, 5, false); objR1.each(function(value){alert(value);}); //'-2','1','0','1','2'がそれぞれ表示される('3'は表示されない) alert("next..."); objR2.each(function(value){alert(value);}); //'2','3','4','5'がそれぞれ表示される
*1:1ずつ増やす