2009-01-29 30 views
28

Có thể lấy danh sách các hàm do người dùng định nghĩa trong JavaScript không?Danh sách các hàm do người dùng xác định toàn cục trong JavaScript?

Tôi hiện đang sử dụng này, nhưng nó sẽ trả về các chức năng mà không phải là người sử dụng định nghĩa:

var functionNames = []; 

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

Trong Firefox, điều này đã cho kết quả mong đợi esults, cụ thể là tất cả các hàm trên đối tượng toàn cầu, cửa sổ. Bạn đang đề cập đến những gì dương tính giả? – Zach

+0

Tôi cũng tự hỏi những gì tích cực sai bạn đang nói về? Tôi cũng nhận thấy rằng bạn đã không khai báo f, vì vậy nó sẽ kết thúc trong phạm vi toàn cầu nếu nó là một phần của một hàm. – some

Trả lời

19

Tôi giả sử bạn muốn lọc ra các chức năng bản địa. Trong Firefox, Function.toString() trả về cơ quan chức năng, mà cho các chức năng bản địa, sẽ theo hình thức:

function addEventListener() { 
    [native code] 
} 

Bạn có thể phù hợp với mô hình /\[native code\]/ trong vòng lặp của bạn và bỏ qua các chức năng phù hợp.

+0

Vâng, đó là những gì tôi đang tìm kiếm. cảm ơn – Annan

-3

Sử dụng trình duyệt 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)}; 

Không để báo cáo 'điều'.

+0

Tính năng này có hoạt động trong các trình duyệt web khác không? –

+0

'điều' là một đối tượng toàn cục. 'thing.makeGreeting' là một hàm nhưng không phải là toàn cục. Không phải những thứ này nên bị bắt. – Annan

8

Như Chetan Sastry gợi ý trong câu trả lời của mình, bạn có thể kiểm tra sự tồn tại của [native code] bên trong hàm chuyển đổi thành chuỗi:

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

Hoặc đơn giản là:

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

trong chrome bạn có thể nhận được tất cả phi các biến và hàm gốc:

Object.keys(window); 
Các vấn đề liên quan