Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/410.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中添加回调,就像在C中一样#_Javascript_C#_Callback_Delegates - Fatal编程技术网

在javascript中添加回调,就像在C中一样#

在javascript中添加回调,就像在C中一样#,javascript,c#,callback,delegates,Javascript,C#,Callback,Delegates,在C#中,我可以执行以下操作: public delegate void Callback(); void f1() { } void f2() { } Callback c = f1; c+=f2; var c; function f1() { } function f2() { } c = f1; 然后当我调用c()时,就会调用f1和f2 如何在javascript中实现相同的结果 我的意思是,我可以在javascript中执行以下操作: public delegat

在C#中,我可以执行以下操作:

public delegate void Callback();

void f1() {

}

void f2() {

}

Callback c = f1;
c+=f2;
var c;

function f1() {

}

function f2() {

}

c = f1;
然后当我调用
c()
时,就会调用
f1
f2

如何在javascript中实现相同的结果

我的意思是,我可以在javascript中执行以下操作:

public delegate void Callback();

void f1() {

}

void f2() {

}

Callback c = f1;
c+=f2;
var c;

function f1() {

}

function f2() {

}

c = f1;
但是我不能将
f2
添加到
c

var t = function(callback){
// do stuff
callback();
}

function callbackFuction(){
// this is your callback fucntion
}

function diffrentFuntion(){
   t(callbackFuction);
}

希望这能回答您的问题

它被称为多播委托,我不确定是否有直接的方式用JavaScript表示。但我找到了这个

不,你不能。JavaScript没有C#委托的概念

使用jQuery可以实现类似的功能,但不是相同的功能:

var c=$({});
函数a(){console.log('a called!');}
函数b(){console.log('b called!');}
c、 在(‘火’上,a);
c、 “着火”,b);
c、 触发器('fire');//调用两个事件处理程序

这里是另一个例子。这可能满足您的需求,也可能不满足您的需求,但您可以修改它以满足您的需要

基本上,您正在创建一个包含函数引用数组的对象。在对象上调用
.apply()
时,它将按照添加的顺序调用所有函数

功能委托(fn){
this.callbacks=[];
本条增补(fn);
}
delegate.prototype.add=函数(fn){
if(fn类型==“函数”){
这个.callbacks.push(fn);
}
}
delegate.prototype.apply=函数(){
for(此.callbacks中的变量i){
this.callbacks[i].apply();
}
}
//范例
//定义回调
函数cb1(){console.log('callback 1');}
函数cb2(){console.log('callback 2');}
//使用第一个回调创建委托
var回调=新委托(cb1);
//添加第二个回调
callback.add(cb2);
//召集代表

callback.apply()this.callbacks.forEach()