受け入れられた解決策は差し迫った問題を解決しますが、コア オブジェクトを拡張することは一般的に悪い考えです。を使用するライブラリを後で含めるとどうなりますfor..in
か? または、数か月後に忘れて、コードの別のセクションで間違ったアプローチを使用した場合は?
別のオプションは、ラップして拡張することです。のインスタンスをArray
プロトタイプとして使用する新しい型を作成します。
function ArrayThing() {}
ArrayThing.prototype = new Array();
これで、影響を与えずに拡張できるオブジェクトができましたArray
。
ArrayThing.prototype.max = function() {
return Math.max.apply(null, [].slice.call(this, 0))
}
ArrayThing.prototype.min = function() {
return Math.min.apply(null, [].slice.call(this, 0))
}
var list = new ArrayThing();
// standard array methods still work
list.push(5);
list.push(22);
list.push(0);
list.push(-14);
list.length // => 4
// as do your new custom methods
list.max() // => 22
list.min() // => -14
これはすべての状況で機能するわけではありませんが、本当に本当に が必要であると確信していない限りArray
、これは便利な代替手段です。