2015-05-09 74 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