ホームページ > ウェブフロントエンド > jsチュートリアル > 「for...in」ループに影響を与えずにプロトタイプ メソッドを配列やオブジェクトに追加するにはどうすればよいですか?

「for...in」ループに影響を与えずにプロトタイプ メソッドを配列やオブジェクトに追加するにはどうすればよいですか?

Barbara Streisand
リリース: 2024-12-10 09:25:09
オリジナル
1017 人が閲覧しました

How Can I Add Prototype Methods to Arrays and Objects Without Affecting `for...in` Loops?

反復子を妨げずにプロトタイプ メソッドにアクセスする

ヘルパー メソッドを使用して 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 サイトの他の関連記事を参照してください。

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
著者別の最新記事
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート