Javascript 调整事件侦听器大小后类方法中断
这是我的问题的一个小例子。我正在尝试建立一个响应类,当我更改宽度大小时,它将调整我的页面 更改大小后,最初调用的方法将消失。您可以通过调整页面大小来测试它Javascript 调整事件侦听器大小后类方法中断,javascript,Javascript,这是我的问题的一个小例子。我正在尝试建立一个响应类,当我更改宽度大小时,它将调整我的页面 更改大小后,最初调用的方法将消失。您可以通过调整页面大小来测试它 类页面管理器{ 构造函数(){ 这是宽度; 这是我的手机; } init(){ this.attachListeners(); 这个.widthChanges(); 这个.adjustPage(); } 附件侦听器(){ window.addEventListener(“resize”,this.widthChanges); } 宽度变化(
类页面管理器{
构造函数(){
这是宽度;
这是我的手机;
}
init(){
this.attachListeners();
这个.widthChanges();
这个.adjustPage();
}
附件侦听器(){
window.addEventListener(“resize”,this.widthChanges);
}
宽度变化(){
this.width=window.innerWidth;
这个.adjustPage();
如果(此宽度<491){
this.isMobile=true
}否则{
this.isMobile=false
}
}
第()页{
控制台日志(“已启动”);
}
}
const pageManager=new pageManager();
pageManager.init()代码>您遇到范围问题,功能adjustPage
在功能widthChanges
的范围下不存在
在函数widthChanges
中调用this.adjustPage()
时,this
将是函数widthChanges
的上下文,而不是类页面管理器的上下文,因此,函数ajustPage
不存在
您可以解决将类上下文绑定到函数中的问题,如下面所示
你可以在这里找到更多关于这个的信息:
类页面管理器{
构造函数(){
这是宽度;
这是我的手机;
this.attachListeners=this.attachListeners.bind(this);
this.widthChanges=this.widthChanges.bind(this);
}
init(){
this.attachListeners();
这个.widthChanges();
这个.adjustPage();
}
附件侦听器(){
window.addEventListener(“resize”,this.widthChanges);
}
宽度变化(){
this.width=window.innerWidth;
这个.adjustPage();
如果(此宽度<491){
this.isMobile=true
}否则{
this.isMobile=false
}
}
第()页{
控制台日志(“已启动”);
}
}
const pageManager=new pageManager();
pageManager.init()
调用addEventListener的回调,并将添加事件的对象(在本例中为窗口)绑定为this
。您可以使用箭头函数,也可以自己绑定此
值
window.addEventListener("resize", this.widthChanges.bind(this));
//or
window.addEventListener("resize", ()=>this.widthChanges());