現在の JavaScript コードがどのように機能するかを理解するのが困難です。イベント ハンドラ クロージャからプライベート オブジェクト メソッドにアクセスする際の問題は解決できましたが、なぜそうなるのか知りたいです。
このコードは、よく知られているモジュール/プラグインの比喩を利用しています。
(function(module, $, undefined)
{
function myPrivateCode(e){ /*...*/ }
module.myPublicCode = function(e) { /*...*/ }
module.init = function()
{
var that = this;
$('.clickable').click(function(e)
{
if($(e.target).hasClass('classX'))
{
that.myPublicCode(e.target); // requires 'that' to work
}
else
{
// that.
myPrivateCode(e.target); // will fail if 'that' uncommented
}
});
}
}(window.module = window.module || {}, jQuery ));
コードでは、パブリック メソッドまたはプライベート メソッドのいずれかを呼び出すクリック ハンドラーを設定します。オブジェクト参照をイベント ハンドラー クロージャーに渡す必要があることは完全に考えられますが、これはthat
ローカル変数によって行われます。私にとって奇妙なのは、参照としてmyPrivateCode
必要とせずthat
、「プライバシー」のために失敗することです。myPrivateCode
これは、適切なオブジェクトにアクセスしておらず、期待どおりに動作していないと思わせます。誰かが何が起こるか説明できますか? 確かに私は何かが欠けています。