いいえ。 javascriptはプロトタイプです。そのプロトタイプを変更することで、何か(ネイティブなタイプのもの)を拡張できることを意味します。あなたは、後で作成する任意の配列を反復処理することを可能にする新しいメソッドを追加したい場合などには、あなたは何だろう:[].each(function(el) {});
:
Array.prototype.each = function(callback) {
// this == the array. code here...
return this;
};
が、これは後に.eachをサポートしています作成した任意の配列を意味しています。はい、mootoolsは非常にプロトタイプのフレームワークです。ものごとはAMDになるmootoolsミルクで変わります。したがって、ネイティブを拡張することなく...
最終的には、javascriptではすべてがObjectネイティブからプロトタイプチェーンを継承します。
Arrayについては、実際には適切なArray Typeではありません.JavaScriptでは、配列のようなプロパティを持つObjectによく似ています。あなたが持っている問題を持っている理由を私にもたらします:
for (var foo in obj)
実際にはループの方法Objects
ではなく、Arrays
です。私が言及したようにオブジェクトのようなものなので、配列でも動作します。
しかし、プロトタイプのフレームワークで作業する場合や、実行するすべてのコードやプロトタイプチェーンにどのような影響を与えているかわからない場合は、間違ったことです。他の言語で '連想配列'として知られているものを使用する場合は、単にObjectを使用してください。
mootoolsでは、Object.each(function(value, key) {});
を使用して反復処理できます。
または:あなたのループチェックに表示する項目hasOwnProperty場合:
for (var data in dataArray) {
if (dataArray.hasOwnProperty(data)) {
// avoids working with prototype.
}
}
輝かしいです。 :)明確で簡潔です。おかげで、完全な意味をつくって、私の問題を一掃してしまいました。 :) WR! – WhiteRau
'for(var data' - データがスコープ内で宣言されていない場合、それは暗黙のグローバル変数になり、最後に反復されたプロパティの値になります。 –