可以說我有一些函數,如[ function f1{}, function f2{}]
,我知道函數我想獲得一個引用也被稱爲「f2」,以便我可以從數組中刪除它,我將如何去解決它?我嘗試使用包含數組的對象,如如果只知道函數的名稱,如何獲得數組中函數的引用?
ctrl。$ parsers [「f2」]但它不返回任何內容。這可能嗎?
可以說我有一些函數,如[ function f1{}, function f2{}]
,我知道函數我想獲得一個引用也被稱爲「f2」,以便我可以從數組中刪除它,我將如何去解決它?我嘗試使用包含數組的對象,如如果只知道函數的名稱,如何獲得數組中函數的引用?
ctrl。$ parsers [「f2」]但它不返回任何內容。這可能嗎?
你可以迭代這個數組和檢查功能的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']
使用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);
}
你可以使用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'
爲什麼不讓你的函數根據你的數組的索引進行編號,那麼你可以更容易地訪問它們。所以例如,如果f1是你的第一個函數,你可以採用字符串「f1」並獲得最後一個數字,然後從中減去1並將其用作數組索引 – ddelnano