1. プロキシとは何ですか?Proxy オブジェクトは、ターゲット オブジェクトの指定された操作を傍受および変更するために使用されます。 // 構文 const p = new Proxy(target, handler)
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 のその他のコンテンツにも注目していただければ幸いです。 以下もご興味があるかもしれません:
|
>>: Linux の GRUB ブート プログラムの暗号化の概要
この記事では、参考までにMySQL 8.0.15のインストールと設定方法のグラフィックチュートリアル...
httpsを取得する方法を勉強しています。最近、Tencent Cloud が提供する無料の SSL...
Windows 10 は Linux サブシステムをサポートするようになり、面倒なデュアル システ...
この記事では、例を使用して、Mysql データベースの基本的な SQL ステートメントについて説明し...
<br />HTML 言語では、タグを使用してテーブルにタイトルを自動的に追加できます。...
環境: 1. Windows Server 2016 Datacenter 64 ビット 2. SQ...
1. 背景通常、外部サービスを提供する必要がある Docker コンテナの場合、起動時に -p コマ...
ファイル名が少ないファイルを表示ファイル名を少なく | grep -n コンテンツを検索内容に応じて...
目次リアクティブ機能使用法: toRef 関数 (理解するだけ)使用法: ref関数レスポンシブデー...
HTMLでCSSを定義するには、埋め込み、リンク、インラインの3つの方法が一般的に使用されます。 1...
まずMySQLにログインする シェル> mysql --user=root mysqlパスワー...
MySQL データベースにデータを挿入します。以前はよく使われていた INSERT INTO テーブ...
最近、CSS インターフェースに取り組んでいるときに、line-height と height とい...
この記事ではMySQL 5.7.20のインストールと設定方法を記録し、皆さんと共有します1. MyS...
1. Vue - 最初の vue-cli プログラムVueの開発はNodeJSに基づいています。実際...