Javascriptで配列の[]演算子をオーバーロードすることは可能ですか?
たとえば、ブラケットの動作を変更して、範囲外のインデックスにアクセスしたときに ではなく 0 を返すようにしたいと考えていますundedined
。
私はおそらく次のようなもので逃げることができることを知っています:
function get(array, i) {
return array[i] || 0;
}
しかし、それは私が望むように配列の動作を実際に変更しているわけではありません。
Javascriptで配列の[]演算子をオーバーロードすることは可能ですか?
たとえば、ブラケットの動作を変更して、範囲外のインデックスにアクセスしたときに ではなく 0 を返すようにしたいと考えていますundedined
。
私はおそらく次のようなもので逃げることができることを知っています:
function get(array, i) {
return array[i] || 0;
}
しかし、それは私が望むように配列の動作を実際に変更しているわけではありません。
は演算子ではないため[]
、「オーバーライド」することはできませんが、プロパティをArray
のプロトタイプに追加することはできます。これは、特定のケースで役立つ場合があります。しかし、それは悪い習慣です:
Array.prototype.get = function(i, fallback) { return this[i] || fallback; }
a = [1, 2, 3]
a.get(0, 42)
1
a.get(4, 42)
42
[]
は演算子ではないため、オーバーライドできません。
他の JavaScript オブジェクトのアクセサー(['somespecificvalue']
書き込みまたは読み取りのオーバーライド) はオーバーライドできますが[]
、配列のアクセサーはオーバーライドできません。
上書きできないことを嬉しく思います。アプリケーション全体を判読不能にする以外に、その意味がわかりません (変更がないことを確認するためにコード全体を読む前に、基本的な構文要素を理解できないアプリケーションは判読不能です)。