2015-05-09 97 views
0

我在寫一個簡短的類(第一次使用Javascript中的類)來處理我的網站的菜單圖標。這個菜單圖標需要能夠在同一頁面上多次實例化。JavaScript類可訪問性變量範圍問題

我使用滾動事件發射功能,這似乎沒有影響到正確的類實例時,有一個問題,這是我的僞代碼:

var DynMenu = function(Name) { 
this.Name = Name; 

this.scrollHandler = function() { 
    alert("Scroll: "+this.Name); 
}; 

DynMenu.prototype.Pause = function() { 
    alert("Pausing menu: "+this.Name); 
    $(window).off("scroll", this.scrollHandler); 
}; 

DynMenu.prototype.Start = function() { 
    alert("Starting menu: "+this.Name); 
    $(window).scroll(this.scrollHandler); 
}; 
} 

此代碼調用,並且具有以下使用:

var RevendMenu = new DynMenu("MenuIcon1"); 
RevendMenu.Start(); 
RevendMenu.Pause(); 

當滾動頁面(調用RevendMenu.Start()之後,但在調用RevendMenu.Pause()之前),我得到的消息 「滾動:未定義」

五月你告訴我爲什麼我沒有得到這個名字的價值,我該如何解決這個問題?

感謝在瀏覽器中的很多 問候 弗洛朗

回答

1

事件處理程序要麼設置this來觸發該事件,或在情況下,有沒有元素觸發事件,全局對象的元素。在瀏覽器中,全局對象是window

爲了這個綁定的方法屬於可以使用.bind()對象:

$(window).off("scroll", this.scrollHandler.bind(this)); 

或者說,在舊的瀏覽器不具備.bind()你可以在一個封閉拍攝this說:

var that = this; 
$(window).off("scroll", function() {that.scrollHandler()}); 

對於如何this作品更詳細的解釋,請參閱本:How does the "this" keyword in Javascript act within an object literal?

+0

非常感謝Slebetman很多爲您的幫助和鏈接,這是非常有趣 – ehretf

+0

我確認這是工作偉大的檢索我的對象變量,但關閉不工作了,我不明白爲什麼到目前爲止,任何想法? – ehretf

+0

@ehretf:我不太用jQuery,所以你必須閱讀'.off()'方法的文檔。至於爲什麼'this'之前沒有工作的原因,請查看我在答案底部引用的鏈接。 – slebetman