このポインティング問題について

これは JavaScript 言語のキーワードです。

この値は、関数が使用される場所によって変わります。ただし、一般的な原則があり、これは常に last を呼び出したオブジェクトを指します


これが指し示す形(4種類)

  1. 一般的な関数の場合、これはグローバル オブジェクト ウィンドウを指します。
  2. 厳密モードでは未定義 "use strict"
  3. オブジェクトのメソッドで呼び出され、メソッドを呼び出すオブジェクトを指します
  4. コンストラクターの this は、new によって作成されたインスタンスを指していますが、
    なぜこれが指しているのですか? 最初に、 new キーワードは空のオブジェクトを作成し、次に自動的に関数適用メソッド (たとえば、このメソッドである必要はありません) を呼び出し、これをこの空のオブジェクトにポイントします。これにより、関数内の this がこの空のオブジェクトに置き換えられます。その代わり。

これが戻ってくると

戻り値がオブジェクトの場合、これは返されたオブジェクトを指し、戻り値がオブジェクトでない場合、これは関数のインスタンスを指します。
注: null もオブジェクトですが、null は特別なので、ここでは this はその関数のインスタンスを指します。


これが指し示す方法を変更する

  • call: 最初のパラメーターに加えて、複数のパラメーターを追加できます b.call(a,1,2)
  • apply: call と似ていますが、2 番目のパラメーターは配列 b.apply(a,[1,2]) でなければならないという違いがあります。
  • 注: call と apply の最初のパラメーターが null の場合、これはウィンドウ オブジェクトを指します。
  • bind: 複数のパラメータが存在する可能性があり、実行可能になったときにパラメータを再度追加できますが、パラメータは仮パラメータの順序であることに注意してください。

要約:

  • 呼び出しと適用の両方がコンテキスト内の this を変更し、関数をすぐに実行します
  • bind メソッドを使用すると、対応する関数をいつでも呼び出すことができ、実行中にパラメーターを追加できます。

おすすめ

転載: blog.csdn.net/Robergean/article/details/120164765