Как проверить, существует ли функция в JavaScript? - PullRequest
451 голосов
/ 25 июня 2009

Я следовал этому руководству , чтобы создать новый JS для флэш-связи.

Мой код

function getID( swfID ){
     if(navigator.appName.indexOf("Microsoft") != -1){
          me = window[swfID];
     }else{
          me = document[swfID];
     }
}

function js_to_as( str ){
     me.onChange(str);
}

Однако иногда мой onChange не загружается. Ошибки Firebug с

me.onChange не является функцией

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

Любые предложения о том, как убедиться, что он существует, а затем выполнить только onChange?

(Ни один из методов ниже, кроме как попытаться поймать одну работу)

Ответы [ 26 ]

3 голосов
/ 13 августа 2015

Мне нравится использовать этот метод:

function isFunction(functionToCheck) {
  var getType = {};
  return functionToCheck && getType.toString.call(functionToCheck) === '[object Function]';
}

Использование:

if ( isFunction(me.onChange) ) {
    me.onChange(str); // call the function with params
}
2 голосов
/ 21 сентября 2013

Я всегда проверяю так:

if(!myFunction){return false;}

просто поместите его перед любым кодом, который использует эту функцию

2 голосов
/ 18 ноября 2016

Этот простой код jQuery должен сделать свое дело:

if (jQuery.isFunction(functionName)) {
    functionName();
}
2 голосов
/ 18 марта 2016

У меня был случай, когда имя функции варьировалось в зависимости от переменной (в данном случае var 'x'), добавленной к имени функции. Это работает:

if ( typeof window['afunction_'+x] === 'function' ) { window['afunction_'+x](); } 
2 голосов
/ 25 июня 2009

без условий

me.onChange=function(){};

function getID( swfID ){
     if(navigator.appName.indexOf("Microsoft") != -1){
          me = window[swfID];
     }else{
          me = document[swfID];
     }
}

function js_to_as( str ){
     me.onChange(str);
}
2 голосов
/ 25 июня 2009

Я подозреваю, что me неправильно получает назначенную нагрузку.

Перемещение вызова get_ID в событие onclick должно позаботиться об этом.

Очевидно, что вы можете и дальше ловить, как упоминалось ранее:

function js_to_as( str) {
  var me = get_ID('jsExample');
  if (me && me.onChange) {
    me.onChange(str);
  }
}
2 голосов
/ 01 марта 2017

Я попробовал принятый ответ; однако:

console.log(typeof me.onChange);

возвращает неопределенное значение. Я заметил, что в спецификации указано событие «onchange» вместо «onChange» (обратите внимание на camelCase).

Изменение исходного принятого ответа на следующее сработало для меня:

if (typeof me.onchange === "function") { 
  // safe to use the function
}
2 голосов
/ 25 июня 2009
function js_to_as( str ){
     if (me && me.onChange)
         me.onChange(str);
}
1 голос
/ 15 декабря 2018

Поставь двойной восклицательный знак т.е. перед именем функции, которую вы хотите проверить. Если он существует, он вернет true.

function abc(){
}
!!window.abc; // return true
!!window.abcd; // return false
1 голос
/ 15 февраля 2017

Если вы проверяете функцию, которая является плагином jQuery, вам нужно использовать $ .fn.myfunction

if (typeof $.fn.mask === 'function') {
    $('.zip').mask('00000');
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...