Как проверить, существует ли функция в JavaScript?

Вариант того, который я использовал в течение довольно продолжительного времени, это:

CREATE FUNCTION [widget].[properCase](@string varchar(8000)) RETURNS varchar(8000) AS
BEGIN   
    SET @string = LOWER(@string)
    DECLARE @i INT
    SET @i = ASCII('a')
    WHILE @i <= ASCII('z')
    BEGIN
        SET @string = REPLACE( @string, ' ' + CHAR(@i), ' ' + CHAR(@i-32))
        SET @i = @i + 1
    END
    SET @string = CHAR(ASCII(LEFT(@string, 1))-32) + RIGHT(@string, LEN(@string)-1)
    RETURN @string
END

Вы можете легко изменить для обработки символов после элементов, отличных от пробелов, если хотите.

459
задан piperchester 9 December 2017 в 00:59
поделиться

9 ответов

Попробуйте что-нибудь вроде этого:

if (typeof me.onChange !== "undefined") { 
    // safe to use the function
}

или еще лучше (согласно комментариям UpTheCreek)

if (typeof me.onChange === "function") { 
    // safe to use the function
}
1116
ответ дан 22 November 2019 в 22:45
поделиться

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

if ( typeof window['afunction_'+x] === 'function' ) { window['afunction_'+x](); } 
2
ответ дан Sebastian H 9 December 2017 в 00:59
поделиться

Библиотека Underscore.js определяет его в методе isFunction следующим образом (что, как предполагают комментарии, может исправить некоторые ошибки браузера)

typeof obj == 'function' || false

http://underscorejs.org/docs/underscore .html # раздел-143

3
ответ дан PandaWood 9 December 2017 в 00:59
поделиться

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

const func = me.onChange || (str => {}); func(str);

1
ответ дан 22 November 2019 в 22:45
поделиться

В нескольких словах: Поймайте Исключение.

я действительно удивлен, что никто не ответил или прокомментировал об Исключении, Завоевывают популярность это сообщение все же.

Деталь: функция ниже является примером от моей кодовой базы. Когда JavaScript не находит функцию, он должен бросить ReferenceError, который можно обработать, как Вы желаете на разделе выгоды.

function inputMask(input){
  try{
    let maskedInput = eval("mask_"+input.name);
    if(typeof maskedInput === "undefined")
    return input.value;
    else
    return eval("mask_"+input.name)(input);

  } catch(e){
    if (e instanceof ReferenceError) {
      return input.value;
    }
  }

}
0
ответ дан 22 November 2019 в 22:45
поделиться

I would suspect that me is not getting correctly assigned onload.

Moving the get_ID call into the onclick event should take care of it.

Obviously you can further trap as previously mentioned:

function js_to_as( str) {
  var me = get_ID('jsExample');
  if (me && me.onChange) {
    me.onChange(str);
  }
}
2
ответ дан 22 November 2019 в 22:45
поделиться

Без условий

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
ответ дан 22 November 2019 в 22:45
поделиться

Я сделаю еще один шаг, чтобы убедиться, что свойство действительно является функцией

function js_to_as( str ){
     if (me && me.onChange && typeof me.onChange === 'function') {
         me.onChange(str);
     }
}
4
ответ дан 22 November 2019 в 22:45
поделиться
function js_to_as( str ){
     if (me && me.onChange)
         me.onChange(str);
}
2
ответ дан 22 November 2019 в 22:45
поделиться
Другие вопросы по тегам:

Похожие вопросы: