Проверьте, существует ли функция динамически - PullRequest
1 голос
/ 09 августа 2011

Мне нужна функция, чтобы проверить, существует ли функция в jQuery и, если это правда, эту функцию следует вызывать. Если я использую приведенный ниже код с простым именем, он работает, но если я хочу динамически проверить, существует ли функция, она не работает. У кого-нибудь есть идеи?

function homeController() {
    console.log('in the homecontroller');
}

$('div[class="view"]').each(function() {
        $('#' + this.id).live('pageshow', function() {
            var func = this.id + 'Controller';              
            if($.isFunction(func)) {
                console.log('jquery exists');
            }
        });
    });

Ответы [ 6 ]

3 голосов
/ 09 августа 2011

Используйте метод jQuery.isFunction(), чтобы проверить, является ли объект функцией или нет.

$('div[class="view"]').each(function() {
        $('#' + this.id).live('pageshow', function() {
            var func = eval(this.id + 'Controller');              
            if($.isFunction(func)) {
                console.log('jquery exists');
            }
        });
    });
1 голос
/ 09 августа 2011

$. IsFunction - «Определить, является ли переданный аргумент объектом функции Javascript».Очевидно, вы передаете строку.

Если вы хотите проверить плагин jQuery, чем использовать

if (typeof jQuery[yourFunctionName] == 'function') { ..

А для общей функции JavaScript -

if(typeof window[yourFunctionName] == 'function') { ..
1 голос
/ 09 августа 2011

Я думаю, вам нужно использовать eval для этого, потому что ваш func является строкой.

var func = eval(this.id + 'Controller');
if($.isFunction(func)) {
   func();
}
0 голосов
/ 30 октября 2014

Reflection-java также может использоваться для динамической проверки того, существует метод или поле или класс. для дополнительной информации: Как проверить, существует ли метод во время выполнения в Java?

0 голосов
/ 03 июля 2013
function doIt(callback) {

    console.log('Did it');

    typeof callback === 'function' && callback();

}

Это только выполняет обратный вызов, если функция существует. Вы можете извлечь эту строку из этой функции и использовать ее где угодно.

0 голосов
/ 09 августа 2011

Вам необходимо выяснить, в какой области находится ваша функция (или, другими словами, какой объект является свойствами ваших функций), а затем использовать

if ($.isFunction(scope[func])) {
    ...
}

для преобразования имени требуемой функции в ссылку на эту функцию в текущей области.

Это предполагает, конечно, что ваши функции на самом деле в некоторой области.

Таким образом, если ваша homeController() функция была объявлена ​​в глобальной области видимости, она будет свойством глобального объекта window..

Однако, если они только что были объявлены как внутренняя функция в каком-то другом замыкании, у них их не будет.

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