Javascript 如何修复:';无法读取未定义的';对象实例的定义?

Javascript 如何修复:';无法读取未定义的';对象实例的定义?,javascript,class,model-view-controller,Javascript,Class,Model View Controller,我正在尝试为tinder克隆制作一个MVC模式(这是一个学校项目) 我可以在构造函数中访问this.model和this.view,但是一旦我尝试在构造函数之外执行一个方法,我的变量似乎是“未定义的” 看起来好像是这个。变量超出范围并丢失 我尝试注销构造函数和“likeUser”方法中的值,但只有构造函数给我值,另一个控制台日志抛出错误 使用的插件: 埃斯林特 使用的编译器: 网页包 从“./Event”导入事件; 从“../View/View”导入视图; 从“../Model/Model”导

我正在尝试为tinder克隆制作一个MVC模式(这是一个学校项目)

我可以在构造函数中访问this.model和this.view,但是一旦我尝试在构造函数之外执行一个方法,我的变量似乎是“未定义的”

看起来好像是这个。变量超出范围并丢失

我尝试注销构造函数和“likeUser”方法中的值,但只有构造函数给我值,另一个控制台日志抛出错误

使用的插件: 埃斯林特

使用的编译器: 网页包


从“./Event”导入事件;
从“../View/View”导入视图;
从“../Model/Model”导入模型;
类控制器扩展事件{
构造函数(){
超级();
this.view=新视图(文档);
this.model=新模型(本地存储);
//console.log(this.model)
//控制台日志将显示该实例
this.model.setToZero();
this.model.checkFirstFetch('https://randomuser.me/api/?results=10');
this.profiles=this.model.selectProfiles();
this.index=this.model.selectswipcounter();
this.view.profile(this.profiles,this.index);
this.listen('.select\u likes',click',this.view.likes);
this.listen('.select\u dislikes',click',this.view.dislikes);
//事件侦听器将执行“likeUser()”
this.listen('.btn\u like',click',this.likeUser);
this.listen('.btn_u______________________________;
}
likeUser(){
//console.log(this.model)
//显示错误“无法读取未定义的属性“selectProfiles”
console.log(this.model.selectProfiles());
试一试{
this.profiles=this.model.selectProfiles();
this.index=this.model.selectswipcounter();
this.model.addLike(this.profiles[this.index]);
if(this.model.needNewUsers())this.model.fetchProfiles();
该指数+=1;
此.model.setsweep计数器(此.index);
this.view.addLike(this.model.getArray('likes');
this.view.profile(this.profiles,this.index);
}捕获(e){
控制台日志(e.message);
}
}
}
我希望函数返回localStorage中的配置文件数组,而不是返回:“无法读取未定义的属性'selectProfiles'”

使用
.bind(this)
,每次调用
likeUser()

您还可以尝试另一种方法,以避免每次都必须
.bind
。删除
.bind
的所有实例,并在
super()之后添加此行:

对于需要与构造函数共享
的每个函数,都要这样做

此方法使构造函数和绑定函数中的
This
相同

-


顺便说一句,您的
dislikeUser()
似乎丢失了。

我认为您需要像这样绑定构造函数中的函数:this.likeUser.bind(this)我尝试了您提出的方法,但结果是出现了“无法读取未定义的属性'bind'”错误。抱歉,第一行中有一个拼写错误,我现在修复了它。
this.listen('.btn__like', 'click', this.likeUser.bind(this));
this.likeUser = this.likeUser.bind(this);