我很難理解,我目前的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