Список глобальных пользовательских функций в JavaScript? - PullRequest
29 голосов
/ 30 января 2009

Можно ли получить список пользовательских функций в JavaScript?

Я сейчас использую это, но он возвращает функции, которые не определены пользователем:

var functionNames = [];

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

Ответы [ 3 ]

19 голосов
/ 30 января 2009

Я предполагаю, что вы хотите отфильтровать нативные функции. В Firefox Function.toString() возвращает тело функции, которое для нативных функций будет иметь вид:

function addEventListener() { 
    [native code] 
}

Вы можете сопоставить шаблон /\[native code\]/ в вашем цикле и опустить соответствующие функции.

9 голосов
/ 09 августа 2014

Как сказал Четан Шастри в своем ответе, вы можете проверить наличие [native code] внутри строковой функции:

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

Или просто:

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

в chrome вы можете получить все не собственные переменные и функции:

Object.keys(window);
0 голосов
/ 08 января 2010

Использование 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)};

Не сообщает «вещь».

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...