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());