如果只知道函数的名称,如何在数组中引用函数?

时间:2013-11-22 20:12:08

标签: javascript

假设我有[ function f1{}, function f2{}]这样的函数数组,我知道我想要获取引用的函数也被称为“f2”,所以我可以将它从数组中删除,我该如何去关于它?我尝试使用包含像

这样的数组的对象

ctrl。$ parsers [“f2”]但它不会返回任何内容。这可能吗?

3 个答案:

答案 0 :(得分:2)

您可以迭代数组并检查函数的name属性:

function getNamedFunction(arr, name) {
    for (var i = 0, l = arr.length; i < l; i++) {
        if (arr[i].name === name) {
            return arr[i];
        }
    }
}

Function#name is not a standard property:

  

此功能不符合标准,不符合标准。不要在面向Web的生产站点上使用它:它不适用于每个用户。实现之间可能存在很大的不兼容性,并且行为可能在将来发生变化。

更好(更兼容)的方法是将函数存储在对象中:

var functions = {
   'f1': f1,
   'f2': f2,
};

并使用

访问它
functions['f1']

答案 1 :(得分:1)

使用name道具并尝试此

for (var i=0;i<arr.length;i++)
{
 if (arr[i].name=='f2')....
}

稍后您可以使用splice删除元素。

array.splice(index, 1);(返回相同的数组实例)

P.S。

此功能是非标准的

那你能做什么?

你可以这样做:

var g=[function f2(){},function f4(){}];

for (var i=0;i<g.length;i++)
{
  var m=g[i].toString().match(/function\s+(\w+)/i);

  if (m  && m[1]=='f4') alert(i);
}

答案 2 :(得分:1)

您可以使用Array的filter方法选择具有特定名称的函数

var myFunctions = [
    function a(){ alert(1); },
    function b(){ alert(2); },
    function c(){ alert(3); }
];

var someName = 'c'; // name of function to search for

// filter array checking the name property of each function in the array
var someFunction = myFunctions.filter(function(f){ 
    return f.name == someName; 
})[0]; // get the first function from the resulting filtered array

someFunction(); // alerts '3'