[解決済み] jQueryの$.proxy()を理解する
質問
から
ドキュメント
と理解しています。
.proxy()
は、引数として渡された関数のスコープを変更します。どなたか、もっとうまく説明していただけませんか?なぜこのようなことをしなければならないのでしょうか?
どのように解決するのですか?
最終的に何をするかというと、このメソッドは
this
は、関数内で希望する値になります。
よくある例としては
setTimeout
の中で行われる
click
ハンドラです。
これを持って
$('#myElement').click(function() {
// In this function, "this" is our DOM element.
$(this).addClass('aNewClass');
});
その意図は単純だ。いつ
myElement
がクリックされると、そのクラス
aNewClass
. ハンドラの内部では
this
はクリックされた要素を表します。
しかし、クラスを追加する前に短い遅延が必要な場合はどうでしょうか?その場合は
setTimeout
を使用することができますが、問題は、どのような機能を
setTimeout
の値は
this
その関数の内部では
window
の代わりに、私たちの要素を使用します。
$('#myElement').click(function() {
setTimeout(function() {
// Problem! In this function "this" is not our element!
$(this).addClass('aNewClass');
}, 1000);
});
そこで、代わりにできるのが
$.proxy()
に代入したい関数と値を送信します。
this
そして、その値を保持する関数を返します。
$('#myElement').click(function() {
// ------------------v--------give $.proxy our function,
setTimeout($.proxy(function() {
$(this).addClass('aNewClass'); // Now "this" is again our element
}, this), 1000);
// ---^--------------and tell it that we want our DOM element to be the
// value of "this" in the function
});
ということで
$.proxy()
関数、そして
this
を確保するための関数を返しました。
this
が適切に設定されていることを確認します。
どのように行うのでしょうか?それは、単に
を呼び出します。
を使用した我々の関数です。
.apply()
メソッドの値を明示的に設定することができます。
this
.
返される関数を簡略化すると、次のようになります。
function() {
// v--------func is the function we gave to $.proxy
func.apply( ctx );
// ----------^------ ctx is the value we wanted for "this" (our DOM element)
}
つまり、この無名関数に
setTimeout
そして、この関数が行うことは、私たちのオリジナルの関数を、適切な
this
のコンテキストを使用します。
関連
-
JSアレイループと効率解析の比較
-
[解決済み] jQueryで要素が非表示になっているかどうかを確認するには?
-
[解決済み] jQueryでチェックボックスに "checked "を設定する
-
[解決済み] なぜGoogleはJSONレスポンスにwhile(1);を前置するのでしょうか?
-
[解決済み] event.preventDefault() vs. return false
-
[解決済み] jQueryの「exists」関数はありますか?
-
[解決済み] (a== 1 && a ==2 && a==3) が真に評価されることはあるのでしょうか?
-
[解決済み] JSONPとは何か、なぜ作られたのか?
-
[解決済み] React JSX内のループ
-
[解決済み】jQueryでチェックボックスがチェックされているかどうかを確認するにはどうすればよいですか?
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
fetch ネットワークリクエストラッパーの説明例
-
vueネットワークリクエストソリューション ネイティブネットワークリクエストとjsネットワークリクエストライブラリ
-
JavaScriptのクロージャの説明
-
Vueでルートネスティングを実装する例
-
[解決済み】SyntaxError: JSONの位置1に予期しないトークンoがある。
-
[解決済み】Uncaught SyntaxError: JSONの位置0に予期しないトークンuがあります。
-
[解決済み】「X-Frame-Options」を「SAMEORIGIN」に設定したため、フレームでの表示を拒否された。
-
HTML5 LocalStorage ローカルストレージとセッションストレージの使用法
-
nullのプロパティinnerHTMLを読み取れません エラーメッセージ
-
JSクリックイベント - Uncaught TypeError: プロパティ 'onclick' に null を設定できません。