JavaScript类可访问性变量范围问题
问题描述:
我在写一个简短的类(第一次使用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()之前),我得到的消息 “滚动:未定义”
五月你告诉我为什么我没有得到这个名字的价值,我该如何解决这个问题?
感谢在浏览器中的很多 问候 弗洛朗
答
事件处理程序要么设置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?
非常感谢Slebetman很多为您的帮助和链接,这是非常有趣 – ehretf
我确认这是工作伟大的检索我的对象变量,但关闭不工作了,我不明白为什么到目前为止,任何想法? – ehretf
@ehretf:我不太用jQuery,所以你必须阅读'.off()'方法的文档。至于为什么'this'之前没有工作的原因,请查看我在答案底部引用的链接。 – slebetman