JavaScript Proxyオブジェクトの詳細な説明

JavaScript Proxyオブジェクトの詳細な説明

1. プロキシとは何ですか?

Proxy オブジェクトは、ターゲット オブジェクトの指定された操作を傍受および変更するために使用されます。

// 構文 const p = new Proxy(target, handler)
  • target : ターゲット オブジェクト (ネイティブ配列、関数、または別のプロキシを含む、任意のタイプのオブジェクトにすることができます)。
  • ハンドラー: インターセプションとカスタム操作を実装するための関数を属性として持つオブジェクト。

2. 使い方は?

1. プロキシを使用する簡単な例

存在しないプロパティにアクセスする場合は、undefined ではなくデフォルト値を返すように設定します。

// 1. 適切なハンドラを見つけてコードを記述する const handler = {
    取得: 関数(obj, prop) {
        obj 内の prop を返します。obj[prop] : 37;
    }
};
// 2. 新しい Proxy オブジェクトを作成します。const p = new Proxy({}, handler);
// 3. 操作を実行する pa = 1;
pb = 未定義;
// 4. 結果を確認する console.log(pa, pb); // 1, undefined
console.log('c' in p, pc); // 偽、37

2. 対象オブジェクトが正しく変更されている

ターゲットを{}とします。
p = new Proxy(target, {}); とします。
pa = 37; // 操作はターゲットに転送されます console.log(target.a); // 37. 操作は正しく転送されました

3. データ検証にセットハンドラを使用する

バリデーター = {
  設定: 関数(オブジェクト、プロパティ、値) {
    (prop === '年齢')の場合{
      if (!Number.isInteger(値)) {
        throw new TypeError('年齢は整数ではありません');
      }
      (値>200)の場合{
        throw new RangeError('年齢が無効なようです');
      }
    }
    // 値を保存するデフォルトの動作
    obj[prop] = 値;
    // 成功を示します。true を返します。
  }
};
person = new Proxy({}, validator); とします。
人.年齢 = 100;
console.log(人.年齢);
// 100
person.age = '若い';
// 例外がスローされます: Uncaught TypeError: 年齢が整数ではありません
人.年齢 = 300;
// 例外をスローします: Uncaught RangeError: 年齢が無効のようです

4. 拡張コンストラクタ

関数extend(sup, base) {
  var 記述子 = Object.getOwnPropertyDescriptor(
    base.prototype、「コンストラクタ」
  );
  base.prototype = Object.create(sup.prototype);
  var ハンドラ = {
    構築: 関数(ターゲット、引数) {
      var obj = Object.create(base.prototype);
      this.apply(ターゲット、オブジェクト、引数);
      obj を返します。
    },
    適用: 関数(ターゲット、その、引数) {
      sup.apply(それ、引数);
      base.apply(それ、引数);
    }
  };
  var proxy = 新しい Proxy(base, handler);
  記述子.値 = プロキシ;
  Object.defineProperty(base.prototype、"コンストラクタ"、記述子);
  プロキシを返します。
}
var Person = 関数 (名前) {
  this.name = 名前
};
var Boy = extend(Person, 関数 (名前, 年齢) {
  this.age = 年齢;
});
Boy.prototype.sex = "M";
var Peter = new Boy("Peter", 13);
console.log(Peter.sex); // "M"
console.log(Peter.name); // "ピーター"
console.log(Peter.age); // 13

要約する

この記事はこれで終わりです。皆さんのお役に立てれば幸いです。また、123WORDPRESS.COM のその他のコンテンツにも注目していただければ幸いです。

以下もご興味があるかもしれません:
  • JavaScript のプロキシ オブジェクト
  • jsプロキシの原理の詳細な説明
  • JSはあなたをプロキシの世界に深く導きます
  • JavaScript における ES6 プロキシの具体的な使用法
  • JavaScript Proxy ではどのような興味深いことができるのでしょうか?

<<:  システム外のフォント参照とトランジション効果

>>:  Linux の GRUB ブート プログラムの暗号化の概要

推薦する

Windows での MySQL 8.0.15 のインストールと設定方法のグラフィック チュートリアル

この記事では、参考までにMySQL 8.0.15のインストールと設定方法のグラフィックチュートリアル...

nginx と Tencent Cloud の無料証明書を使用して https を作成する方法

httpsを取得する方法を勉強しています。最近、Tencent Cloud が提供する無料の SSL...

Windows 10 に Linux サブシステムをインストールする 2 つの方法 (画像とテキスト付き)

Windows 10 は Linux サブシステムをサポートするようになり、面倒なデュアル システ...

MySQL データベースの基本的な SQL ステートメントの概要

この記事では、例を使用して、Mysql データベースの基本的な SQL ステートメントについて説明し...

HTML テーブル マークアップ チュートリアル (14): テーブル ヘッダー

<br />HTML 言語では、タグを使用してテーブルにタイトルを自動的に追加できます。...

ApacheのDjangoオンライン展開方法

環境: 1. Windows Server 2016 Datacenter 64 ビット 2. SQ...

ポートマッピング後に Docker コンテナが突然接続に失敗する問題のトラブルシューティング プロセス

1. 背景通常、外部サービスを提供する必要がある Docker コンテナの場合、起動時に -p コマ...

Linux lessコマンド例の詳細な説明

ファイル名が少ないファイルを表示ファイル名を少なく | grep -n コンテンツを検索内容に応じて...

Vue3 のリアクティブ関数 toRef 関数 ref 関数の紹介

目次リアクティブ機能使用法: toRef 関数 (理解するだけ)使用法: ref関数レスポンシブデー...

HTML ドキュメントに CSS を埋め込む一般的な 3 つの方法

HTMLでCSSを定義するには、埋め込み、リンク、インラインの3つの方法が一般的に使用されます。 1...

Mysql 5.6ではユーザー名とパスワードを変更するメソッドが追加されました

まずMySQLにログインする シェル> mysql --user=root mysqlパスワー...

MySQL における INSERT INTO SET の利点

MySQL データベースにデータを挿入します。以前はよく使われていた INSERT INTO テーブ...

CSSのline-heightとheightの詳細な説明

最近、CSS インターフェースに取り組んでいるときに、line-height と height とい...

MySQL サーバー 5.7.20 のインストールと設定方法のグラフィック チュートリアル

この記事ではMySQL 5.7.20のインストールと設定方法を記録し、皆さんと共有します1. MyS...

Vue 初心者ガイド: 最初の Vue-cli スキャフォールディング プログラムの作成

1. Vue - 最初の vue-cli プログラムVueの開発はNodeJSに基づいています。実際...