JavaScript
 Computer >> コンピューター >  >> プログラミング >> JavaScript

JavaScriptのProxy(プロキシ)オブジェクトとは?使い方をサンプルコードで解説

Proxyオブジェクトとは

JavaScriptのProxy(プロキシ)オブジェクトは、元のオブジェクトや関数をラップ(包み込む)し、プロパティへのアクセスや関数の呼び出しなどの基本的な操作に対して、独自のカスタム処理を挟むための仕組みです。

Proxyは次の2つの引数を受け取ります。

  • target:操作対象となる元のオブジェクト
  • handler:カスタム動作(トラップ)を定義するオブジェクト

handler内では、プロパティ取得時に呼ばれるget、プロパティ設定時に呼ばれるsetなど、さまざまなトラップを定義できます。

サンプルコード

以下は、Proxyオブジェクトを使って、オブジェクトには存在しないプロパティへアクセスした際にカスタム処理の結果を返す例です。

<!DOCTYPE html>
<html lang="ja">
<head>
<meta charset="UTF-8" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
<title>Document</title>
<style>
   body {
      font-family: "Segoe UI", Tahoma, Geneva, Verdana, sans-serif;
   }
   .sample {
      font-size: 18px;
      font-weight: 500;
      color: red;
   }
</style>
</head>
<body>
<h1>JavaScript Proxy() Object</h1>
<div class="sample"></div>
<button class="Btn">CLICK HERE</button>
<h3>
上のボタンをクリックすると、Proxyオブジェクト経由でオブジェクトの値にアクセスします
</h3>
<script>
   let sampleEle = document.querySelector('.sample');
   const test = {
      Name: 'Rohan Sharma',
      birthYear: 1990,
   };
   const handler = {
      get: function(target, objectKey) {
         if (objectKey === 'FirstName') {
            return target.Name.split(' ')[0];
         }
         if (objectKey === 'CurrentAge') {
            let date = new Date();
            return date.getFullYear() - target.birthYear;
         } else {
            return Reflect.get(target,objectKey);
         }
      }
   };
   const proxy1 = new Proxy(test, handler);
   document.querySelector('.Btn').addEventListener('click',()=>{
      sampleEle.innerHTML += 'proxy1.Firstname = ' + proxy1.FirstName + '<br>';
      sampleEle.innerHTML += 'proxy1.CurrentAge = ' + proxy1.CurrentAge + '<br>';
   })
</script>
</body>
</html>

コードのポイント

  • handler.get:プロパティが読み取られるタイミングで呼び出されるトラップです。ここで独自の処理を記述できます。
  • Reflect.get(target, objectKey):デフォルトのプロパティ取得動作を実行します。カスタム処理が不要なキーは、そのまま元のオブジェクトから値を返します。
  • 元のオブジェクトに存在しない「FirstName」や「CurrentAge」に対しても、あたかも実在するプロパティであるかのように値を返せる点が、Proxyの強力な特徴です。

実行結果

ページを開くと、次のように「CLICK HERE」ボタンが表示されます。

JavaScriptのProxy(プロキシ)オブジェクトとは?使い方をサンプルコードで解説

ボタンをクリックすると、Proxy経由で取得した値が画面に出力されます。「FirstName」には氏名から抽出された名前部分(Rohan)が、「CurrentAge」には生年(1990年)から動的に計算された現在の年齢が表示されます。

JavaScriptのProxy(プロキシ)オブジェクトとは?使い方をサンプルコードで解説

  1. JavaScriptのRegExp(正規表現)オブジェクトとは?基本の使い方をわかりやすく解説

    RegExp(正規表現)オブジェクトは、テキストに対してパターンマッチングを行い、目的の文字列部分を検索・抽出するために使用されます。JavaScriptでは、RegExpオブジェクトを「RegExpコンストラクタ」または「リテラル構文」の2通りの方法で作成できます。 RegExpオブジェクトの作成方法 コンストラクタを使用する場合: new RegExp(pattern) リテラル構文を使用する場合: /pattern/ 主なメソッド test():文字列がパターンに一致するかどうかを真偽値(true / false)で返します。 exec():パターンに一致した文字列を返します。

  2. JavaScriptのオブジェクト初期化子とは?使い方をサンプルコードで解説

    オブジェクト初期化子とは オブジェクト初期化子(Object Initializer)は、新しく生成したオブジェクトを初期化するための式です。波括弧 {} の中に、「プロパティ名」と「それに対応する値」のペアを0個以上、カンマ区切りで列挙して記述します。 これにより、変数宣言と同時にオブジェクトの中身を簡単に定義することができます。 以下は、JavaScriptでオブジェクト初期化子を使用したサンプルコードです。 サンプルコード <!DOCTYPE html> <html lang="en"> <head> <meta chars