[コアJavaScript]3this

4576 ワード

他のほとんどのオブジェクト向け言語では、thisはクラスとして作成されたインスタンスオブジェクトを表しますが、JavaScriptではどこでも使用できます.
これはJavaScriptで唯一関数とオブジェクト(メソッド)を区別する機能です.これはあなたの状況によって異なります.そのため、正しい自動方法が分からない場合は、原因を特定して解決することはできません.
これは、関数の呼び出し方法に依存し、ターゲットを関数にバインドする明確な方法があります.

状況次第だ


JavaScriptでは、デフォルトでは、実行コンテキストの作成時に決定されます.これは関数を呼び出すときに決定されたと言える.関数の呼び出し方法によって値が異なりますので、状況に応じてまとめます.

グローバルスペースのthis


グローバル空間では、グローバルオブジェクトを表します.グローバルオブジェクトには、JavaScriptランタイム環境に応じて異なる名前と情報があります.
ブラウザ環境でthis:window
node.js環境ではthis:global

グローバル空間でのみ発生する特殊な性質


グローバル変数を宣言すると、JavaScriptエンジンはグローバルオブジェクトのプロファイルとして指定します.変数であり、オブジェクトのプロパティでもあります.
JavaScriptのすべての変数は、特定のオブジェクト(実行コンテキストのメキシコ環境)のプロバイダとして使用されます.ユーザーが変数を宣言すると、実際のJavaScriptエンジンは特定のオブジェクトのpropertyとみなされます.
ただし、グローバル変数宣言とグローバルオブジェクトのプロパティ割り当ての間にはまったく異なる場合があります.「削除」コマンドです.最初からグローバルオブジェクトのプロパティとして指定した場合は削除され、グローバル変数として宣言した場合は削除されません.
varとして宣言されたグローバル変数とグローバルオブジェクトのプロパティは、ハイライトするかどうかと構成可能かどうかで異なります.

メソッドとして呼び出す場合、メソッド内部のthis


関数とメソッドの違いは独立性です.関数自体は独立した機能を実行し、メソッドは呼び出したターゲットオブジェクトに関連する操作を実行します.関数としての呼び出しとメソッドとしての呼び出しは、関数の前に点(.)を付けます.に表示されます.
メソッド内部のthis
最後のポイントまでに指定したオブジェクトはthisです.
関数内部のthis
このオプションを指定せずに、グローバルオブジェクトを表示します.
メソッド内部関数のthis
内部関数が関数として呼び出されるか、メソッドとして呼び出されるかを決定すると、この値を正確にフィットできます.

メソッドの内部関数でthisを迂回するメソッド

var self = this;を変数として使用し、内部関数で使用するために親スキャンに格納することができる.
ES 6は、実行コンテキストの作成時に関数にバインドする必要がなく、関数でグローバルオブジェクトを表示する問題を補う新しい矢印関数を導入した.
矢印関数を使用する場合
  • 高度なスキャンプログラムの
  • 迂回法
  • は不要

    コールバック関数を呼び出すと、関数内部のthis


    デフォルトでは、コールバック関数はグローバルオブジェクトも参照されます.コールバック関数も無視されますが、制御された関数でコールバック関数に別のターゲットが指定されている場合は参照されます.

    コンストラクション関数のthis


    コンストラクション関数の内部で、thisは新規作成する特定のインスタンス自体を示します.

    これを明示的にバインドします。


    上記のルールに合致しない場合は、明示的にバインドされます.

    コールメソッド

    Function.prototype.call(thisArg[, arg1[,arg2[, ...]]])
    メソッド呼び出しの主体である関数を直ちに実行できるコマンドです.
    最初のパラメータ:このバインド
    次のパラメータ:関数を呼び出すパラメータ

    適用方法

    Function.prototype.apply(thisArg[,argsArray])
    機能的にはcallメソッドと全く同じです.
    異なる点は、2番目のパラメータのみを配列として受け入れ、その配列の要素を呼び出す関数のパラメータとして指定することです.

    bindメソッド

    Function.prototype.bind(thisArg[, arg1[,arg2[, ...]]])
    callと同様ですが、すぐに呼び出すのではなく、渡されたthisとパラメータに基づいて新しい関数を返す方法です.
    bindメソッドは,動詞bindの受動接頭辞「bound」をname propertyに付加する.トレースコードは、従来の呼び出しやアプリケーションに比べて容易です.

    メソッドの内部関数でthisを迂回するメソッド


    上記selfなどの変数を用いた迂回法に比べてcall,apply,bind法の処理はより簡潔である.

    矢印関数


    ES 6に新しい矢印関数を導入した.矢印関数を使用して、これをバインドするプロセスを除外します.アクセスしたい場合は、スキャンチェーンで最も近いthisにアクセスします.

    個別のパラメータとしてthis(コールバック関数のthis)を受信した場合


    パラメータとしてコールバック関数を受信する方法によっては、パラメータとして指定する他のオブジェクト(thisArg)をパラメータとして指定できます.
    forEach, map, filter, some, every, find, findIndex, flatMap, from