ホームページ > ウェブフロントエンド > jsチュートリアル > JavaScript プロキシは、未定義のプロパティの動的なゲッターとセッターを作成できますか?

JavaScript プロキシは、未定義のプロパティの動的なゲッターとセッターを作成できますか?

Patricia Arquette
リリース: 2024-10-29 04:49:02
オリジナル
1005 人が閲覧しました

 Can JavaScript Proxies Create Dynamic Getters and Setters for Undefined Properties?

JavaScript の動的ゲッターとセッター

はじめに:

JavaScript は、ゲッターとプロパティを介してプロパティにアクセスおよび変更するための柔軟なメカニズムを提供します。セッター。事前に決定されたプロパティ名に対してゲッターとセッターを定義する方法はよく知られていますが、未定義のプロパティ名に適用される動的ゲッターとセッターを実装することは可能ですか?

動的ゲッタープロキシを使用したセッター (ES6 ):

ES2015 の時点で、JavaScript にプロキシが導入され、他のオブジェクトの「ファサード」として機能するオブジェクトの作成が可能になりました。これにより、ゲッターやセッターなどのプロパティ操作の傍受と変更が可能になります。

例:

次のコード スニペットは、プロキシを使用した動的なゲッターとセッターを示します。

<code class="javascript">"use strict";
if (typeof Proxy == "undefined") {
    throw new Error("This browser doesn't support Proxy");
}
let original = {
    example: "value",
};
let proxy = new Proxy(original, {
    get(target, name, receiver) {
        if (Reflect.has(target, name)) {
            let rv = Reflect.get(target, name, receiver);
            if (typeof rv === "string") {
                rv = rv.toUpperCase();
            }
            return rv;
        }
        return "missing";
    }
});

console.log(`original.example = ${original.example}`); // "original.example = value"
console.log(`proxy.example = ${proxy.example}`);       // "proxy.example = VALUE"
console.log(`proxy.unknown = ${proxy.unknown}`);       // "proxy.unknown = missing"
original.example = "updated";
console.log(`original.example = ${original.example}`); // "original.example = updated"
console.log(`proxy.example = ${proxy.example}`);       // "proxy.example = UPDATED"</code>
ログイン後にコピー

この例では:

  • 元のオブジェクトには、値「value」を持つプロパティの例が含まれています。
  • プロキシは、元のオブジェクトのファサードとして作成されます。 get() ハンドラー。
  • get() ハンドラーはプロパティへのアクセスをインターセプトします。プロパティがオリジナルに存在する場合は、その値が返されます。プロパティが見つからない場合は、「missing」を返します。
  • アクセスされたプロパティの値が文字列の場合は、大文字に変換されます。
  • プロキシを介したプロパティの変更は、オリジナルに反映されます。
  • プロキシ作成後にオリジナルで定義されたプロパティには、プロキシ経由でもアクセスできます。

以上がJavaScript プロキシは、未定義のプロパティの動的なゲッターとセッターを作成できますか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

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