必要なすべてのメソッドが含まれているが、最終値の代わりに使用できる特別なオブジェクトを返すことで、同様のことを行うことができます。たとえば、Array
これらすべてのメソッドを含むインスタンスを返すことができます。
var getstuff = function () {
obj = Array.apply(this, arguments);
obj.take = function (n) {
return this[n];
};
obj.grep = function (regexp) {
return getstuff.apply(this, Array.prototype.filter.apply(this, [function (item) {
return item.toString().search(regexp) !== -1;
}]));
};
obj.splice = function () {
return getstuff.apply(this, Array.prototype.splice.apply(this, arguments));
}
return obj;
}
// shows [-8, 1]
console.log(getstuff(3, 1, 2, 'b', -8).sort().grep(/\d+/).splice(0, 2));
// shows 3
var stuff = getstuff(3, 1, 2, 'b', -8).grep(/\d+/);
console.log(stuff.sort()[stuff.length]);
上記は特に高速な実装ではありませんが、グローバルAllay
のプロトタイプをクリーンに保つことで特別なメソッドを使用して配列を返すため、他のコードに干渉することはありません。
でこれらの特別なメソッドを定義することで高速化できArray.prototype
ますが、注意が必要です...
または、ブラウザがサブクラス化をサポートしている場合、Array
必要なのはsupclassと便利なコンストラクターだけですgetstuff()
。