P粉9211300672023-08-21 14:13:52
bind() 関数を使用できます。
関数
を使用します。
リーリー
http://underscorejs.org/#bind リーリー
2. context/this の参照を別の変数に保存しますP粉1761515892023-08-21 10:04:21
this (「コンテキスト」とも呼ばれる) は、すべての関数内の特別なキーワードであり、その値は関数の定義方法ではなく、関数の呼び出し方法にのみ依存します。他の変数とは異なり、字句スコープの影響を受けません (アロー関数を除く、以下を参照)。ここではいくつかの例を示します:###
リーリー
この
アロー関数を使用する
バインディングはありません。代わりに、通常の変数と同様に、this がスコープ内で検索されます。これは、.bind
を呼び出す必要がないことを意味します。その他の特別な動作もあります。詳細については、MDN ドキュメントを参照してください。
リーリー
これは使用しないでください
にアクセスする必要はなく、それが参照するオブジェクトにアクセスする必要があります。したがって、簡単な解決策は、オブジェクトを指す新しい変数を作成することです。変数には任意の名前を付けることができますが、一般的な名前は
selfthat です。
リーリー
self
は通常の変数であるため、字句スコープ規則に従い、コールバック関数内でアクセスできます。これには、コールバック関数自体の
this
コールバック関数の明示的な設定
this - パート 1
の値は自動的に設定されるため、制御できないように見えるかもしれませんが、実際はそうではありません。
.bind
[Documentation] があり、これは this## を実行するメソッドを返します。 #値にバインドされた新しい関数。この関数は、this がユーザーによって設定されることを除いて、.bind を呼び出したときとまったく同じように動作します。関数がいつどのように呼び出されるかに関係なく、
this
は常に渡された値を参照します。
リーリー
この場合、コールバック関数の this
を MyConstructor
の
値にバインドします。
注:
jQuery のバインディング コンテキストには、jQuery.proxy
[ドキュメント] を使用します。その理由は、イベント コールバックのバインドを解除するときに関数への参照を保存する必要がないためです。 jQuery はこれを内部で処理します。
コールバック関数の設定this - パート 2
コールバック関数を受け入れる一部の関数/メソッドは、コールバック関数の
Array#map注:
リーリー
this.method 解決策 上記と同じ: .bind[Documentation]
がそのようなメソッドです。その署名は次のとおりです:
リーリー
最初のパラメータはコールバック関数で、2 番目のパラメータは this が参照する値です。以下は不自然な例です: リーリー
this
の値を渡すことができるかどうかは、通常、関数/メソッドのドキュメントに記載されています。たとえば、jQuery の $.ajax
メソッド [Documentation] には、context
というオプションが記述されています。
FAQ: オブジェクト メソッドをコールバック/イベント ハンドラーとして使用する
この問題のもう 1 つの一般的な症状は、オブジェクト メソッドをコールバック/イベント ハンドラーとして使用することです。 JavaScript では、関数は第一級市民であり、「メソッド」という用語は単にオブジェクトのプロパティの値である関数を指します。ただし、関数とその「包含」オブジェクトの間には特定のリンクがありません。 がクリック イベント ハンドラーとして割り当てられていますが、
document.body がクリックされた場合、記録される値は
unknown になります。イベント ハンドラー内では、
this は
Foo のインスタンスではなく、
document.body を参照します。
前に述べたように、
this は、関数
がどのように呼び出されるか ( を指すものであり、 がどのように定義されるか () を指すものではありません)。
コードが次のようになっていると、よりわかりやすいかもしれません:
リーリー
を使用して、利用可能な場合は
this を特定の値
に明示的にバインドします。
リーリー