2013-11-22 21 views
2

可以說我有一些函數,如[ function f1{}, function f2{}],我知道函數我想獲得一個引用也被稱爲「f2」,以便我可以從數組中刪除它,我將如何去解決它?我嘗試使用包含數組的對象,如如果只知道函數的名稱,如何獲得數組中函數的引用?

ctrl。$ parsers [「f2」]但它不返回任何內容。這可能嗎?

+0

爲什麼不讓你的函數根據你的數組的索引進行編號,那麼你可以更容易地訪問它們。所以例如,如果f1是你的第一個函數,你可以採用字符串「f1」並獲得最後一個數字,然後從中減去1並將其用作數組索引 – ddelnano

回答

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#nameis not a standard property:

此功能是不可標準並且不在標準軌道上。不要在面向Web的生產站點上使用它:它不適用於每個用戶。實現之間也可能存在很大的不兼容性,並且行爲在未來可能會發生變化。

一個更好的(更兼容)的方式將存儲您的功能於一身的對象:

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

和訪問它與

functions['f1'] 
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); 
} 
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' 
相關問題