我很难理解我当前的 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
访问不合适的对象,并且以某种方式与预期的方式不同。有人可以解释会发生什么吗?当然,我错过了一些东西。