ホームページ >ウェブフロントエンド >jsチュートリアル >for-in ループに影響を与えずに Array.prototype と Object.prototype にヘルパー メソッドを追加するにはどうすればよいですか?

for-in ループに影響を与えずに Array.prototype と Object.prototype にヘルパー メソッドを追加するにはどうすればよいですか?

Mary-Kate Olsen
Mary-Kate Olsenオリジナル
2024-12-10 21:26:13946ブラウズ

How Can I Add Helper Methods to Array.prototype and Object.prototype Without Affecting for-in Loops?

for-in ループで表示せずに Array.prototype と Object.prototype のヘルパー メソッドを定義する

組み込みプロトタイプの拡張などArray.prototype および Object.prototype として、単純化するヘルパー メソッドを提供できます。コーディング。ただし、これらのメソッドが for-in ループに予期せず表示され、期待される機能が中断される可能性があります。

問題

Array.prototype へのヘルパー メソッドの追加 (find メソッドなど)質問で述べたように、for-in ループで配列を反復処理するときに不要なプロパティが導入される可能性があります。この問題を回避し、ループ内で配列要素のみが返されるようにするには、これらのメソッドがプロパティとして表示されないように適切に定義することが重要です。

解決策: 列挙不可能なプロパティ

EcmaScript 5.1 では、非列挙プロパティの概念が導入されています。プロトタイプでメソッドを定義するときに enumerable オプションを false に設定すると、for-in 反復中にそのメソッドがリストされるのを防ぐことができます。

Object.defineProperty(Array.prototype, "find", {
    enumerable: false,
    writable: true,
    value: function(testFun) {
        // Code to find element in array
    }
});

このアプローチでは、find メソッドを配列操作に使用できるようになります。ただし、for-in ループの結果には含まれないため、ループの予期される動作が妨げられることはありません。

レガシー ブラウザサポート

列挙不可能なプロパティをサポートしていないブラウザの場合は、フォールバック メソッドを使用するか、Object.prototype.hasOwnProperty.

を使用してプロパティの存在を確認することを検討してください。

以上がfor-in ループに影響を与えずに Array.prototype と Object.prototype にヘルパー メソッドを追加するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。