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

推薦する

Angularの親子コンポーネント通信の詳細な説明

目次概要1. 入力および出力プロパティの概要2. 入力属性3. プロパティバインディングは親コンポー...

MySQL ジョイントインデックスの使用ルール

結合指数は複合指数とも呼ばれます。複合インデックスの場合: MySQL はインデックス内のフィールド...

Dockerコンテナの紹介

1. 概要1.1 基本概念: Docker は、Go 言語をベースにしたオープンソースのアプリケーシ...

MySQL 5.7.21 winx64 無料インストールバージョン設定方法グラフィックチュートリアル

MySQL 5.7.21 winx64無料インストールバージョンの設定方法、参考までに、具体的な内容...

Windows に mysql5.7.28 winx64 の解凍バージョンをインストールするための詳細なチュートリアル

目次1. 解凍する2. データフォルダを作成する3. MySQLに環境変数を追加する3.1 コントロ...

CSS Houdini でダイナミックな波効果を実現

CSS Houdini は、CSS 分野における最もエキサイティングなイノベーションとして知られてい...

Firefox で英語の文字が折り返されない問題の解決方法

テキストのレイアウトには、言語に応じていくつかの書式設定要件があります。たとえば、簡体字中国語では、...

Docker のタイムゾーンの問題とデータ移行の問題

最新のソリューション: -v /usr/share/zoneinfo/Asia/Shanghai:/...

デザイン理論:テキスト表現とユーザビリティ

<br />テキストデザインでは、通常、テキストのレイアウト、つまりテキストをより美しく...

HTML ヘッドタグの詳細な紹介

HTML のヘッド部分には、ブラウザによる Web ページのレンダリングや SEO などに関連するタ...

Vue の foreach 配列と js の traversal 配列の書き方の説明

Vue foreach配列を記述し、jsで配列をトラバースする方法シナリオVueでAxiosを使用し...

HTML、CSS、JSコメントの標準的な使用法の概要

必要なコメントを追加することは、責任感と道徳心のあるフロントエンド開発者が持つべき良い習慣であり、コ...

MySQLのUPDATE文の落とし穴を記録する

背景最近、オンライン操作中に DML ステートメントを実行しました。これは絶対確実だと思っていました...

チェックボックスの選択またはキャンセルを実装するJavaScript

この記事では、すべてのチェックボックスを選択または解除するためのJavaScriptの具体的なコード...

いくつかの一般的な CSS レイアウト (要約)

まとめこの記事では、次の一般的なレイアウトを紹介します。 3 列レイアウトを実装する方法は多数ありま...