假设我有[ function f1{}, function f2{}]
这样的函数数组,我知道我想要获取引用的函数也被称为“f2”,所以我可以将它从数组中删除,我该如何去关于它?我尝试使用包含像
ctrl。$ parsers [“f2”]但它不会返回任何内容。这可能吗?
答案 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'