For-In ループを乱雑にせずに配列とオブジェクトのプロトタイプを拡張する
ヘルパー メソッドを使用して Array.prototype と Object.prototype を拡張する場合、これらのメソッドが値として現れることで for-in ループに干渉しないようにすることが重要です。これは、他のコードが値へのアクセスのみに for-in ループに依存しているシナリオでは特に重要です。
配列を使用した For-In ループを避ける
理想的な解決策は次のとおりです。配列での for-in ループの使用は避けてください。代わりに、組み込みの .map() や .filter() などの配列固有の反復メソッドを使用してください。配列とオブジェクトの両方に遭遇する可能性があるジェネリック関数では for-in ループを避けてください。
オブジェクトで hasOwnProperty() を使用する
ジェネリックで for-in ループの使用が避けられない場合関数では、 hasOwnProperty() メソッドを使用して、関数から継承されたプロパティを除外します。プロトタイプ:
for (var prop in anyObj) if (Object.prototype.hasOwnProperty.call(anyObj, prop)) // do something
ECMAScript 5.1 の列挙不可能なプロパティ
ECMAScript 5.1 では、Object.defineProperty() を使用してプロパティを列挙不可能に設定できます。
Object.defineProperty(Array.prototype, "find", { enumerable: false, writable: true, value: function(testFun) { // code to find element in array } });
これにより、 "find" メソッドは for-in ループには表示されません。ただし、このアプローチは古いブラウザではサポートされていないことに注意することが重要です。互換性を確保するために、ES5-shim などの shim の使用を検討してください。
以上がFor-In ループを中断せずに配列およびオブジェクトのプロトタイプを安全に拡張するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。