JavaScript では、this の値は関数の呼び出しコンテキストによって決まります。 。ただし、コールバック関数またはイベント ハンドラーを使用する場合、このコンテキストは常に必要なわけではありません。
次の例を考えてみましょう。
<code class="javascript">this.name = "John"; var myName = { name: "Tom", getName: function() { return this.name; } }; var storeMyName = myName.getName; // example 1 var storeMyName2 = myName.getName.bind(myName); // example 2 var storeMyName3 = myName.getName(); // example 3</code>
例 1 で storeMyName() を呼び出すと、これがグローバル スコープに割り当てられます。
関数の実行を他のコードに委任すると、this 参照が予測不能になる可能性があります。 binding() を使用すると、関数を呼び出す前に this 値を手動で設定できます。
例 2 では、bind(myName) を使用して storeMyName2() を呼び出すことで、this 値が myName オブジェクトに設定されるようになり、問題が解決されます。例 1.
例 3 ではバインディングなしで myName.getName() を使用しますが、getName() の実行時に適切に設定されるため、正しい値が返されます。関数が実行されます。これは、関数が実行されずに保存される例 1/2 とは対照的です。
Approach | Time of Invocation | Time of this Binding |
---|---|---|
Function Object | Future | Future |
Function Call | Now | Now |
f.bind() | Future | Now |
bind() は、次の場合に JavaScript で不可欠です。別のコンテキストで実行される関数の this 値を制御する必要があります。 bind() を使用すると、予期しない動作を防止し、this 参照が確実に希望どおりに設定されるようにすることができます。
以上がJavaScriptのbind()が必要な場合となぜ必要ですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。