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 ブート プログラムの暗号化の概要
!DOCTYPE HTML ドキュメントが準拠するドキュメント型定義 (DTD) を指定します。 ...
目次序文仮想DOM仮想DOMとは仮想DOMの利点レンダリング関数とは何ですか? jsx Vue3 で...
ゲームのソースコードのダウンロードアドレスを取得するためのJavaScript:クリックしてソースコ...
MySQL 5.7.13 Mac用インストールチュートリアル、非常に詳細で、以下のように記録されてい...
1 公式サイトからMySQL8をダウンロードしてインストールするMySQL8 ダウンロードアドレスこ...
システムメンテナンス中は、いつでも CPU 使用率を確認し、対応する情報に基づいてシステムの状態を分...
mysql maxとwhereの間の実行の問題SQLを実行します: テーブル「grades」を作成し...
チュートリアルシリーズMySQL シリーズ: MySQL リレーショナル データベースの基本概念My...
恥ずかしながら、このようなよく使われるチェックボックスのスタイルを変更するために、Baidu で長い...
目次1. ユニットテストはなぜ必要なのでしょうか? 2. ユニットテストの書き方3. テストツール4...
目次序文クエリの使用シナリオ例時間間隔クエリクエリ日付と今日の時間の比較データ一般的なサイクルタイム...
みなさんこんにちは。今日はカルーセルの実装についてお話しします。私が作成したカルーセルの効果は次のと...
MySQL にリモートでログインする場合、使用するアカウントには特別な要件があります。アカウントのデ...
1. jsonオブジェクトをjson文字列に変換し、文字列が「{}」であるかどうかを判断します。 v...
この記事では、Vueの具体的なコード例を参考までに紹介します。具体的な内容は以下のとおりです。 コー...