アレイ上のfor-in-loopsはabsolutely evilです。それでも、それらは頻繁に使用され、引き起こされたエラーはトレースダウンするのが複雑です。特に、ブラウザに依存する場合は、たとえばindexOf
-shimsなどが原因です。for-inループ検出スニペットは不要な誤検出を生成しますか?
Object.defineProperty(Array.prototype, "error", {
enumerable: true,
get: function() {
if (this === Array.prototype) // that looks OK
return undefined;
if (window.confirm("Somebody who coded the site you're viewing runs through an Array with a for-in-loop.\nShame on him!\n\nDo you want to raise an Error to trace the origin?"))
throw new SyntaxError("Array traverse with for-in-loop, touching Array.prototype's 'error' property :-)");
}
});
は、あなたがのためのグリースモンキースクリプトとして追加することができます
だから、私はArray.prototype
(製品コードでの使用のためではない)に「error
」プロパティの列挙ゲッターを追加して、この単純なスニペットをコード化していますほぼすべてのサイトでアラートが表示されます:-)それらのほとんどは、疑問のある引数を持つjQuery.extend
への呼び出しによって引き起こされます。
私の質問は以下のようになります。合法的な「間違った」は、または他の偽陽性アラートを引き起こし何かをループすることをどのような状況はありますか?
これが私のコードの有用性にどう影響するのだろうかと思います。
あなたの質問を編集して、それほど主観的ではないようにしました。あなたが気にしないことを願っています。 – hugomg
ありがとう、私はそのバージョンが好きです - 私はタイトルとして何を使うべきかわからなかった:-) – Bergi
私はそれを取得しません、どのようにこれを 'Array.prototype'に拡張しますか? '__lookupGetter__'や何かを使う必要があります。これで、単純にエラーが発生します。これは、extend関数がそれを取得し、エラーがスローされ、コピーを停止するためです。 http://jsfiddle.net/MvgJC/ – Esailija