Javascript 在数组中保存函数并检索其索引
如何获取存储在数组中的函数的索引?以下代码返回Javascript 在数组中保存函数并检索其索引,javascript,arrays,function,Javascript,Arrays,Function,如何获取存储在数组中的函数的索引?以下代码返回-1 var myArray = [ function(){console.log('fct1')} ]; myArray.indexOf( function(){console.log('fct1')} ); 更多详细信息: 我正在使用jQuery委派事件。每个事件都有一个或多个要调用的回调函数。我不可能知道这些函数是什么,因为它们没有预先编码。每个回调函数将存储在一个数组中。添加新的回调函数时,我想验证它是否已经在数组中,以避免事件调用的重复
-1
var myArray = [ function(){console.log('fct1')} ];
myArray.indexOf( function(){console.log('fct1')} );
更多详细信息:我正在使用jQuery委派事件。每个事件都有一个或多个要调用的回调函数。我不可能知道这些函数是什么,因为它们没有预先编码。每个回调函数将存储在一个数组中。添加新的回调函数时,我想验证它是否已经在数组中,以避免事件调用的重复项。JavaScript中的任何对象都不等于类似的对象,除了它本身
var func = function() {
console.log('fct1')
};
console.log(Object.prototype.toString.call(func));
# [object Function]
因为函数在JavaScript中也是对象,所以不能用另一个函数对象搜索函数对象,而另一个函数对象也会这样做
要获得匹配,需要使用相同的函数对象,如下所示
var func = function() {
console.log('fct1')
};
var myArray = [func];
console.log(myArray.indexOf(func));
# 0
这是由于多次引用造成的。
您声明的每个函数都有不同的引用,并且不等于另一个。
这就是indexOf无法识别它的原因。 试试这个:
var func = function(){console.log('fct1')};
var myArray = [func];
alert(myArray.indexOf(func)); // will alert 0.
问题在于我试图查找的函数始终是匿名的。我可以将其与
.toString()
匹配吗?还是说这是一个很大的拒绝@Westerfaq您是否使用该函数构造数组?是的。然后我得到另一个函数,必须验证它是否已经在数组中。@Westerfaq哦,那么这是不可能的,除非它是同一个函数对象:'(我将使用.toString()
然后,因为它似乎起作用了。我希望有一种更传统的方法来做。谢谢你,不是引用,而是实例。你可以对同一个对象有多个引用。