JavaScript リフレクション学習のヒント

JavaScript リフレクション学習のヒント

1. はじめに

MDN の公式 Web サイトによると、 Reflect JavaScript操作をインターセプトするメソッドを提供する組み込みオブジェクトです。これらのメソッドは、プロキシ ハンドラー (en-US) の場合と同じです。 Reflect関数オブジェクトではないため、構築できません。

それで、それは正確には何ですか?上記のファイル紹介によると、 Proxyと非常によく似ており、どちらも実行関数自体の情報を取得します。主な違いは、すべての関数オブジェクトのプロパティが複雑すぎるため、追加のプロパティを追加するとプログラムの動作が不合理になる可能性があるため、 Reflect関数が拡張され、関数オブジェクトのメソッドの呼び出し、オブジェクトの構築、プロパティの取得または設定、およびその他の関連操作を具体的に処理できるようになっていることです。

2. インターフェース

Reflectのすべてのメソッドは静的メソッドであり、コンストラクターやインスタンス化は必要ありません。

  • Reflect.apply ( targetthisArgumentargumentsList ) は関数を呼び出し、呼び出しパラメータとして配列を渡すことができます。 Function.prototype.apply()に似ています。
  • Reflect.construct ( target , argumentsList[, newTarget\] ) はコンストラクターに対して新しい操作を実行します。これは、 new target (...args) を実行することと同じです。
  • Reflect.defineProperty ( targetpropertyKeyattributes ) はObject.defineProperty()に似ています。設定が成功した場合はtrueを返します
  • 関数のdelete演算子としてのReflect.deleteProperty(target, propertyKey) delete target[name]を実行することと同じです。
  • Reflect.get(target, propertyKey[, receiver\]) target[name]と同様に、オブジェクトのプロパティの値を取得します。
  • Reflect.getOwnPropertyDescriptor(target, propertyKey) Object.getOwnPropertyDescriptor()に似ています。オブジェクト内にプロパティが存在する場合は、対応するプロパティ記述子を返し、存在しない場合はundefined返します。
  • Reflect.getPrototypeOf(target)Object.getPrototypeOf()に似ています。
  • Reflect.has(target, propertyKey) 、オブジェクトに特定のプロパティがあるかどうかを判断します。これは、 in演算子とまったく同じです。
  • Reflect.isExtensible(target)Object.isExtensible() .
  • Reflect.ownKeys(target)継承されたプロパティを除くすべての独自のプロパティを含む配列を返します。 ( Object.keys()に似ていますが、 enumerableの影響を受けません)。
  • Reflect.preventExtensions(target)Object.preventExtensions()に似ています。 Booleanを返します。
  • Reflect.set(target, propertyKey, value[, receiver\])プロパティに値を割り当てる関数。更新が成功した場合はtrueとなるBooleを返します。
  • Reflect.setPrototypeOf(target, prototype)は、オブジェクトのプロトタイプ関数を設定します。 Booleanを返します。更新が成功した場合はtrueを返します。

3. 簡単な例

たとえば、次のような関数があります。

クラス Person {
  コンストラクター(firstName, lastName) {
    this.firstName = ファーストネーム
    this.lastName = 姓
  }
  getName() を取得する {
    this.firstName + ' ' + this.lastName を返します
  }
}

通常の使用ではインスタンス化のみが必要です。

const person = 新しい Person('Jaxson', 'Wang')
console.log(person.getName) // ジャクソン・ワン

Reflect.construct() メソッドを使用してオブジェクトを作成できます。

const person = Reflect.construct(Person, ['Jaxson', 'Wang'])
console.log(person) // ジャクソン・ワン

4. 結論

Reflect オブジェクトは、次の 3 つの理由から、Proxy プロキシと一緒に使用されることがよくあります。

  • Reflectによって提供されるすべての静的メソッドはProxy 2 番目のhandleパラメータ メソッドとまったく同じです。
  • Proxy get/set()メソッドに必要な戻り値は、 Reflectget/setメソッドの戻り値とまったく同じなので、自然に一緒に使用できます。これは、オブジェクトを直接割り当てたり値を要求するよりも便利で正確です。
  • receiverパラメータは置き換え不可能です。

JavaScript リフレクション学習スキルに関するこの記事はこれで終わりです。より関連性の高い JavaScript リフレクション コンテンツについては、123WORDPRESS.COM の過去の記事を検索するか、以下の関連記事を引き続き参照してください。今後とも 123WORDPRESS.COM をよろしくお願いいたします。

以下もご興味があるかもしれません:
  • Java はエンティティ クラスへのリフレクション JSON 動的変換を実装します - fastjson
  • Java リフレクション、JSON でのジェネリックの使用
  • JavaScript リフレクションとプロパティ割り当ての例の分析
  • ES6 が JS の組み込みプロキシとリフレクションの動作をどのように変更するか
  • JavaScript リフレクションと依存性注入の詳細な例
  • JavaScript オブジェクトリフレクションの使用例
  • Java リフレクションを使用して JavaBean から JSON へのサンプル コードを実現する
  • AJAX JavaScript リフレクション メカニズムの紹介
  • JS リフレクションの問題

<<:  mysql indexof関数の使用手順

>>:  ウェブページ作成時のHTMLタグの使用に注意してください

推薦する

Windows システムの MySQL が中国語を入力および表示できない問題の解決方法

ステップ 1: メモ帳を使用して、MySQL インストール ディレクトリの「my.ini」ファイルを...

html の img src="" で js 関数または js 変数を呼び出して、画像パスを動的に指定します。

この問題に関して、オンライン リソースをたくさん見つけました。ここにいくつかの方法を示します。コード...

ウェブサイトのパフォーマンスを向上させるために画像を最適化する方法

目次概要画像圧縮とはJPEG/JPG JPGの利点JPGの使用シナリオJPGの欠点MozJPEG を...

フロントエンドブラウザのフォントサイズが12px未満のソリューション

序文最近プロジェクトに取り組んでいたとき、UI デザインのフォント サイズは 10 ピクセルでした。...

Ubuntu ターミナル マルチウィンドウ 分割画面 ターミネーター

1. インストールターミネーターの最大の特徴は、1つのウィンドウで複数のターミナルを開くことができる...

Web ページのスクロール バーが右側に設定されているのはなぜですか?

私たちが毎日使っているブラウザや Word 文書のスクロール バーはなぜ右側にあるのでしょうか。多く...

テーブル適応とオーバーフローのいくつかの設定の詳細な説明

1. テーブル リセットの 2 つのプロパティ: ①border-collapse: collaps...

MySQL における datetime と timestamp の違いと選択

目次1 違い1.1 スペース占有1.2 表現範囲1.3 タイムゾーン2 テスト3つの選択肢MySQL...

HTML における相対と絶対の使用法と違いの詳細な説明

HTML における相対と絶対の違い: 正直に言うと、HTML は世界で最もシンプルな言語です。タグ言...

CocosCreator クラシック エントリー プロジェクト flappybird

目次開発環境ゲームエンジンのコンセプトCocos Creatorについてプロジェクト構造コード編集環...

MySQL の暗号化と復号化の例

MySQL の暗号化と復号化の例データの暗号化と復号化はセキュリティ分野で非常に重要です。プログラマ...

Webpack-cliが正常にインストールされたら、詳細についてはwebpack -vエラーケースを確認してください。

目次質問1. webpack webpack-cliをインストールする2. webpackのバージョ...

MongoDB データベースの状態を監視する Zabbix3.4 メソッド

Mongodb には db.serverStatus() コマンドがあり、これを使用して Mongo...

JavaScript タイマーの詳細

目次1. 簡単な紹介2. 間隔を設定する2.1 説明2.2 パラメータ2.3 戻り値2.4 使用法3...

Windows Server 2008 R2 に MySQL 5.7.10 をインストールする手順

MSIインストールパッケージを使用してインストールするご使用のオペレーティング システムに応じて、対...