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

推薦する

MySQL で not in を使用して null 値を含める問題を解決する

知らせ! ! ! uid が (a,b,c,null) に含まれないユーザーから * を選択します。...

Macにmysql5.7.18をインストールする詳細な手順

1. ツール今必要なツールは2つあります: MySQLサーバー (mysql-5.7.18)、MyS...

JS における ES6 継承と ES5 継承の違い

目次継承ES5 プロトタイプ継承ES6 クラス継承両者の違いES5プロトタイプ継承の内部実装ES6 ...

HTML の blockquote タグの使用と美化

ブロック引用の定義と使用法<blockquote> タグは引用ブロックを定義します。 &...

CSSは複数の要素をボックスの両端に揃える効果を実現します

要素の両端を揃える配置レイアウトは、実際の開発のいたるところで見られます。これは、フレックスレイアウ...

MySQLのnull値に関する小さな問題

今日、null 値をテストしていたところ、小さな問題が見つかりました。ここに記録しました。以前にも遭...

JavaScript の基礎: 即時実行関数

目次関数フォーマットを即時実行関数を即座に実行する他の方法 – 式即時実行される関数はパラメータを取...

WebStormはVue3統合APIのソリューションを正しく識別できません

1 問題の説明Vue3 の統合 API は、defineComponent やその他の関数が認識でき...

Linux で MySQL 8.0 サービスを完全に削除する方法

この記事を読む前に、Linuxコマンド、特にcentos7.3環境でyumを使用してインストールされ...

JavaScript の手ぶれ補正とスロットリングの説明

目次安定スロットリング要約する安定自動ドアは人を感知してドアを開け、5 秒間のカウントダウンを開始し...

MySQL SQL文の特殊処理文のまとめ(必読)

1.テーブル全体を更新します。データ行の列の値が空の場合は、別の列フィールドの値と同じにします。 ...

HTML ファイルにフラッシュ ビデオ形式 (flv、swf) ファイルを埋め込む方法

Flash ファイル形式: .FLV および .SWFフラッシュ ビデオ形式には、.flv と .s...

HTML で点線の境界線を設定する方法

CSSスタイルとHTMLタグ要素を使用するさまざまな HTML タグに点線の境界線を追加するために、...

spring-boot と docker-java に基づいて Docker コンテナの動的な管理と監視を実装します [完全なソース コードのダウンロード付き]

Docker入門Docker はオープンソースのアプリケーション コンテナ エンジンです。従来の仮...

Linux システムで MySQL データベースにリモート接続する方法のチュートリアル

序文最近、職場でこの要件に遭遇し、リモート接続を確立するのに 1 時間以上かかりました。ローカル コ...