反復子を妨げずにプロトタイプ メソッドにアクセスする
ヘルパー メソッドを使用して Array.prototype と Object.prototype を拡張するのは一般的な方法ですが、これらのメソッドは頻繁に表示されます。 for-in ループ中に問題が発生する可能性があります。これを回避するには、開発者はメソッドを非列挙可能として設定することで、そのようなループにメソッドが表示されないようにすることができます。
解決策: 非列挙プロパティ
EcmaScript 5.1 では、 Object.defineProperty() メソッド。列挙不可能なプロパティを定義するために使用できます。このメソッドを使用すると、開発者はメソッドの列挙可能属性を false に設定して、for-in ループから見えないようにすることができます。
次の例は、「find」という列挙不可能なメソッドを定義する方法を示しています。 Array.prototype:
Object.defineProperty(Array.prototype, "find", { enumerable: false, writable: true, value: function(testFun) { // Code to find element in the array } });
この定義では、find メソッドは意図したとおりに使用できますが、for-in ループには表示されないため、ループは実際の配列値のみを反復します。
注: このソリューションは、EcmaScript 5.1 をサポートしていない古いブラウザーではサポートされていません。これらのブラウザの場合、開発者は es5-shims などの shim ライブラリを使用して互換性を提供できます。さらに、最新のブラウザで利用できる forEach() メソッドは、プロトタイプ メソッドに遭遇することなく配列を反復処理するための for-in ループの代替として使用できます。
以上が「for...in」ループに影響を与えずにプロトタイプ メソッドを配列やオブジェクトに追加するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。