2009-01-29 20 views
28

Czy można uzyskać listę funkcji zdefiniowanych przez użytkownika w JavaScript?Lista globalnych funkcji zdefiniowanych przez użytkownika w JavaScript?

obecnie używam tego, ale zwraca funkcje, które nie są zdefiniowane przez użytkownika:

var functionNames = []; 

for (var f in window) { 
    if (window.hasOwnProperty(f) && typeof window[f] === 'function') { 
     functionNames.push(f); 
    } 
} 
+0

W przeglądarce Firefox dało to oczekiwane r esults, mianowicie wszystkie funkcje na obiekcie globalnym, okno. Jakie fałszywe alarmy masz na myśli? – Zach

+0

Zastanawiam się również, jakie fałszywe alarmy o których mówisz? Zauważyłem również, że nie zadeklarowałeś f, więc skończy się to zasięgiem globalnym, jeśli był częścią funkcji. – some

Odpowiedz

19

Jestem zakładając chcesz odfiltrować funkcji natywnych. Firefox, Function.toString() zwraca ciało funkcji, które dla funkcji natywnych, będzie w formie:

function addEventListener() { 
    [native code] 
} 

Można dopasować wzór /\[native code\]/ w swojej pętli i pominięcie funkcji, które pasują.

+0

Tak, właśnie tego szukam. dzięki – Annan

-3

Korzystanie z Internet Explorer:

var objs = []; 
var thing = { 
    makeGreeting: function(text) { 
    return 'Hello ' + text + '!'; 
    } 
} 

for (var obj in window){window.hasOwnProperty(obj) && typeof window[obj] === 'function')objs.push(obj)}; 

nie stawi 'coś'.

+0

Czy to działa w innych przeglądarkach internetowych? –

+0

'thing' jest obiektem globalnym. 'thing.makeGreeting' jest funkcją, ale nie globalną. Żadna z tych rzeczy nie powinna zostać złapana. – Annan

8

Jak Chetan Sastry zasugerował w swojej odpowiedzi, można sprawdzić dla istnienia z [native code] wewnątrz funkcji stringified:

Object.keys(window).filter(function(x) 
{ 
    if (!(window[x] instanceof Function)) return false; 
    return !/\[native code\]/.test(window[x].toString()) ? true : false; 
}); 

lub po prostu:

Object.keys(window).filter(function(x) 
{ 
    return window[x] instanceof Function && !/\[native code\]/.test(window[x].toString()); 
}); 

w Chrome można uzyskać wszystkie nie- natywne zmienne i funkcje:

Object.keys(window); 
Powiązane problemy