Javascript 如何从事件侦听器内部调用类函数?

Javascript 如何从事件侦听器内部调用类函数?,javascript,class,events,scope,Javascript,Class,Events,Scope,我试图建立我的JavaScript知识库,当类的对象的文本框中触发事件时,调用类中的函数有困难。我认为这将涉及范围问题,但我不完全确定。在C#中这样做要容易得多 class FilterableDropdown{ 建造商(集装箱){ this.ContainerID=ContainerID; this.Container=document.getElementById(containerID); this.Container.innerHTML+=“” //添加子控件。 this.Textbo

我试图建立我的
JavaScript
知识库,当
类的
对象的
文本框中触发
事件时,调用
类中的
函数
有困难。我认为这将涉及范围问题,但我不完全确定。在
C#
中这样做要容易得多

class FilterableDropdown{
建造商(集装箱){
this.ContainerID=ContainerID;
this.Container=document.getElementById(containerID);
this.Container.innerHTML+=“”
//添加子控件。
this.Textbox=document.getElementById(“txt-”+containerID+“-下拉菜单”);
//将事件添加到子控件。
this.Textbox.addEventListener(“keyup”,this.Filter);
}
过滤器(){
警报(此为集装箱运输);
}
}
var下降=新的可过滤下降(“fd测试”)
.filterable下拉列表>输入[类型=文本]{
填充物:5px;
边界:无;
边框底部:2个实心#333;
边框左上半径:5px;
边框右上角半径:5px;
背景色:#3332;
颜色:#eee;
}
.filterable下拉列表>输入[type=text]:焦点{背景色:#3338;}
*:focus{outline:none;}

您需要将
this
绑定到
过滤器
方法。
this
应该指向类实例

这可以通过使用
Array.prototype.bind(thisContext)
实现,其中
thisContext
将是您的类
FilterableDropdown
实例:

class FilterableDropdown{
建造商(集装箱){
this.ContainerID=ContainerID;
this.Container=document.getElementById(containerID);
this.Container.innerHTML+=“”
//添加子控件。
this.Textbox=document.getElementById(“txt-”+containerID+“-下拉菜单”);
//将其绑定到Filter方法
this.Textbox.addEventListener(“keyup”,this.Filter.bind(this));
}
过滤器(){
警报(此为集装箱运输);
}
}
var下降=新的可过滤下降(“fd测试”)
.filterable下拉列表>输入[类型=文本]{
填充物:5px;
边界:无;
边框底部:2个实心#333;
边框左上半径:5px;
边框右上角半径:5px;
背景色:#3332;
颜色:#eee;
}
.filterable下拉列表>输入[type=text]:焦点{背景色:#3338;}
*:focus{outline:none;}

您需要将
this
绑定到
过滤器
方法。
this
应该指向类实例

这可以通过使用
Array.prototype.bind(thisContext)
实现,其中
thisContext
将是您的类
FilterableDropdown
实例:

class FilterableDropdown{
建造商(集装箱){
this.ContainerID=ContainerID;
this.Container=document.getElementById(containerID);
this.Container.innerHTML+=“”
//添加子控件。
this.Textbox=document.getElementById(“txt-”+containerID+“-下拉菜单”);
//将其绑定到Filter方法
this.Textbox.addEventListener(“keyup”,this.Filter.bind(this));
}
过滤器(){
警报(此为集装箱运输);
}
}
var下降=新的可过滤下降(“fd测试”)
.filterable下拉列表>输入[类型=文本]{
填充物:5px;
边界:无;
边框底部:2个实心#333;
边框左上半径:5px;
边框右上角半径:5px;
背景色:#3332;
颜色:#eee;
}
.filterable下拉列表>输入[type=text]:焦点{背景色:#3338;}
*:focus{outline:none;}

您要做的是使用

this.Textbox.addEventListener("keyup", this.Filter.bind(this));
class FilterableDropdown{
建造商(集装箱){
this.ContainerID=ContainerID;
this.Container=document.getElementById(containerID);
this.Container.innerHTML+=“”
//添加子控件。
this.Textbox=document.getElementById(“txt-”+containerID+“-下拉菜单”);
//将事件添加到子控件。
this.Textbox.addEventListener(“keyup”,this.Filter.bind(this));
}
过滤器(){
警报(此为集装箱运输);
}
}
var下降=新的可过滤下降(“fd测试”)
.filterable下拉列表>输入[类型=文本]{
填充物:5px;
边界:无;
边框底部:2个实心#333;
边框左上半径:5px;
边框右上角半径:5px;
背景色:#3332;
颜色:#eee;
}
.filterable下拉列表>输入[type=text]:焦点{背景色:#3338;}
*:focus{outline:none;}

您要做的是使用

this.Textbox.addEventListener("keyup", this.Filter.bind(this));
class FilterableDropdown{
建造商(集装箱){
this.ContainerID=ContainerID;
this.Container=document.getElementById(containerID);
this.Container.innerHTML+=“”
//添加子控件。
this.Textbox=document.getElementById(“txt-”+containerID+“-下拉菜单”);
//将事件添加到子控件。
this.Textbox.addEventListener(“keyup”,this.Filter.bind(this));
}
过滤器(){
警报(此为集装箱运输);
}
}
var下降=新的可过滤下降(“fd测试”)
.filterable下拉列表>输入[类型=文本]{
填充物:5px;
边界:无;
边框底部:2个实心#333;
边框左上半径:5px;
边框右上角半径:5px;
背景色:#3332;
颜色:#eee;
}
.filterable下拉列表>输入[type=text]:焦点{背景色:#3338;}
*:focus{outline:none;}