Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/416.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 为eventListener类实现一次_Javascript - Fatal编程技术网

Javascript 为eventListener类实现一次

Javascript 为eventListener类实现一次,javascript,Javascript,我试图实现一个自定义发射器类,它有四个方法。除了一次以外,所有的都在工作 我需要实现一个'once'方法,该方法返回事件名称的当前订户数。 once方法的当前行为是事件正在添加,但没有被删除或调用 类发射器{ 构造函数(){ //对象数组 this.events={}; } 打开(eventName,回调){ //如果事件名称不是字符串数据类型,则抛出错误 如果(typeof eventName!=“string”)抛出“事件名称不是字符串”; //如果回调不是函数数据类型,则抛出错误 如果(

我试图实现一个自定义发射器类,它有四个方法。除了一次以外,所有的都在工作

我需要实现一个
'once'
方法,该方法返回事件名称的当前订户数。

once方法的当前行为是事件正在添加,但没有被删除或调用

类发射器{
构造函数(){
//对象数组
this.events={};
}
打开(eventName,回调){
//如果事件名称不是字符串数据类型,则抛出错误
如果(typeof eventName!=“string”)抛出“事件名称不是字符串”;
//如果回调不是函数数据类型,则抛出错误
如果(typeof callBack!=“function”)抛出“callBack不是函数”;
让event=this.events[eventName];
//如果已定义eventName,则推送回调,否则创建
!event?this.events[eventName]=[callBack]:event.push(callBack);
//this.events[eventName]?this.events[eventName].push(回调):this.events[eventName]=[callBack];
返回此.events[eventName].length;
}
关闭(eventName,回调){
//若提供了两个参数,那个么回调必须在那个里!
让isCallBackDefined=arguments.length==2?true:false;
//如果事件名称不是字符串数据类型,则抛出错误
如果(typeof eventName!=“string”)抛出“事件名称不是字符串”;
//如果函数不是函数数据类型(如果提供),则抛出错误
如果(isCallBackDefined&&typeof callBack!=“function”)抛出“callBack不是函数”;
//首先获得正确的事件
让event=this.events[eventName];
//检查事件是否存在,并已注册回调
如果(事件){
//如果没有提供回调函数,则所有函数都将被取消订阅
//事件没有回调,请删除该事件
if(isCallBackDefined===false){
删除此。事件[eventName];
}否则{
//如果已注册,则取消注册!
const index=event.indexOf(回调);
//如果回调在数组中,则将其删除
如果(索引>-1){
事件拼接(索引1);
}
//如果事件没有回调,请删除该事件
如果(event.length==0){
删除此。事件[eventName];
}
}
}
return(this.events[eventName]| |[]).length;
}
触发器(eventName,…args){
if(typeof eventName!=“string”)抛出TypeError(“事件名称不是字符串”);
让听众;
//如果事件存在,请创建浅层副本
if(this.events[eventName]){
侦听器=this.events[eventName].slice();
}
//检查事件是否存在,并已注册回调
如果(侦听器){
for(让侦听器回调){
callBack.apply(此参数为args);
}
}
返回侦听器?真:假;
}
一次(事件,fn){
//如果事件名称不是字符串数据类型,则抛出错误
如果(typeof event!=“string”)抛出“event name不是字符串”;
//如果回调不是函数数据类型,则抛出错误
如果(typeof fn!=“function”)抛出“回调不是函数”;
函数g(){
此项。关闭(事件,g);
fn.应用(此,参数);
}
g、 fn=fn;
这是关于(事件,g);
};

}
您只需返回事件名称的回调次数。我在控制台中添加了一些“测试”供您确认

类发射器{
构造函数(){
//对象数组
this.events={};
}
打开(eventName,回调){
//如果事件名称不是字符串数据类型,则抛出错误
如果(typeof eventName!=“string”)抛出“事件名称不是字符串”;
//如果回调不是函数数据类型,则抛出错误
如果(typeof callBack!=“function”)抛出“callBack不是函数”;
让event=this.events[eventName];
//如果已定义eventName,则推送回调,否则创建
!event?this.events[eventName]=[callBack]:event.push(callBack);
//this.events[eventName]?this.events[eventName].push(回调):this.events[eventName]=[callBack];
返回此.events[eventName].length;
}
关闭(eventName,回调){
//若提供了两个参数,那个么回调必须在那个里!
让isCallBackDefined=arguments.length==2?true:false;
//如果事件名称不是字符串数据类型,则抛出错误
如果(typeof eventName!=“string”)抛出“事件名称不是字符串”;
//如果函数不是函数数据类型(如果提供),则抛出错误
如果(isCallBackDefined&&typeof callBack!=“function”)抛出“callBack不是函数”;
//首先获得正确的事件
让event=this.events[eventName];
//检查事件是否存在,并已注册回调
如果(事件){
//如果没有提供回调函数,则所有函数都将被取消订阅
//事件没有回调,请删除该事件
if(isCallBackDefined===false){
删除此。事件[eventName];
}否则{
//如果已注册,则取消注册!
const index=event.indexOf(回调);
//如果回调在数组中,则将其删除
如果(索引>-1){
事件拼接(索引1);
}
//如果事件没有回调,请删除该事件
if(event.length==