我很难理解,我目前的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
访问不是适当的对象,并以某种方式与预期的方式有所不同。有人能解释会发生什么吗?当然,我错过了一些东西。
在此先感谢。
谢谢。现在很清楚。 – Stan