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タグの使用に注意してください

推薦する

Reactは二次連結(左右連結)を実現する

この記事では、二次リンクを実現するためのReactの具体的なコードを参考までに共有します。具体的な内...

回転するフリップカードアニメーションの効果を実現するCSS

回転フリップ効果の CSS アニメーション、具体的な内容は次のとおりです。 1. まず2つのボックス...

nginx で gzip 圧縮を実装してウェブサイトの速度を向上させる方法

目次gzip 圧縮を使用する理由は何ですか? nginxはgzipを実装するgzip処理nginx ...

Vueのprovideとinjectの使い方と原則を分析する

まず、provide/inject を使用する理由について説明しましょう。祖父コンポーネントと孫コン...

MySQL の Docker インストールと設定手順

目次序文環境インストールMySQLコンテナを作成して起動する思い出させるMySQLコンテナコマンドを...

Linux でシステム ディスクを初期化した後にデータ ディスクを再マウントする方法

Linuxインスタンスでシステムディスクを初期化した後、データディスクを再マウントするLinux イ...

SSL で Nginx リバース プロキシを構成する簡単な手順

序文リバース プロキシは、Web 経由で行われたリクエスト (http と https の両方) を...

MySQL 5.7 のパフォーマンスと sys スキーマの監視パラメータの説明 (推奨)

1. パフォーマンス スキーマ: はじめにMySQL 5.7 では、多数の新しい監視項目の導入、ス...

原因不明のMySqlサービス消失の解決策

原因不明のMySqlサービス消失の解決策先ほど、MySQL-Front が突然 MySql を開けな...

スーパーバイザーによるDockerfileのマルチサービスイメージパッケージ操作

Dockerfileの作成yumソースを設定する cd /tmp/docker vim Docker...

MySQL タイムブラインドインジェクションの 5 つの遅延方法

MySQL タイム ブラインド インジェクションの 5 つの遅延方法 (PWNHUB の予期しない解...

登録フォームのデザインルール

随分前に「Patterns for Sign Up & Ramp Up」を読み終えました。今...

MySQL 派生テーブル(Derived Table)の簡単な使用例分析

この記事では、例を使用して、MySQL 派生テーブルの簡単な使用方法を説明します。ご参考までに、詳細...

MySQL 5.7.20 Green Edition のインストールの詳細なグラフィックチュートリアル

まず、MySQL とは何かを理解しましょう。 MySQL は、スウェーデンの会社 MySQL AB ...

MySQL でファイルデータをインポートする際の 1290 エラーの解決方法

エラーシナリオcmd の mysql コマンドを使用して、学生情報テーブルにデータを追加します。デー...