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 ブート プログラムの暗号化の概要
目次序文ソースコード学習の第一歩はどこから始めればよいでしょうか?写真から始めましょうソースコードを...
目次1. 4つのコンセプト1. JavaScriptはシングルスレッドです2. タスクキュー3. 同...
1. 参照整合性参照整合性とは、主に外部キー制約を使用した複数のテーブル間の設計を指します。複数テ...
目次1. MySQLの主キーとテーブルフィールドに関するコメント1. 主キーと自動増分2. テーブル...
目次1.vモデル2. プロパティとイベントのバインディング3. フォーム要素のバインディング3.1 ...
前回の記事「MySQL テーブル構造の変更、メタデータ ロックを知っておく必要があります」では、MD...
1. ランナーコンテナを作成する mk@mk-pc:~/Desktop$ docker run -d...
この記事を読む前に、ボリュームとバインドマウントの基本を理解しておいてください。詳細については、次の...
Msyqlデータベースのインストール、参考までに具体的な内容は次のとおりです。 ①ブラウザでhttp...
さまざまな理由で、誰もが MySQL を再インストールする必要があると思います。 MySQL と Q...
MySQL サーバーをシャットダウンする場合、シャットダウン方法に応じてさまざまな問題が発生する可能...
環境: [root@centos7 ~]# uname -r 3.10.0-514.el7.x86_...
% ワイルドカードを使用すると、インデックス失敗の問題が発生することがよくあります。ここでは、lik...
フォーマットエンコーディング1. ページの幅は600~800px、長さは1024px以内に設定してく...
Unix ライクなシステムでは、コマンドまたはプロセスの実行がいつ開始されたか、またプロセスがどのく...