Как проверить, существует ли функция в 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 ]

0 голосов
/ 11 октября 2018
function function_exists(function_name)
{
    return eval('typeof ' + function_name) === 'function';
}
alert(function_exists('test'));
alert(function_exists('function_exists'));

OR

function function_exists(func_name) {
  //  discuss at: http://phpjs.org/functions/function_exists/
  // original by: Kevin van Zonneveld (http://kevin.vanzonneveld.net)
  // improved by: Steve Clay
  // improved by: Legaev Andrey
  // improved by: Brett Zamir (http://brett-zamir.me)
  //   example 1: function_exists('isFinite');
  //   returns 1: true

  if (typeof func_name === 'string') {
    func_name = this.window[func_name];
  }
  return typeof func_name === 'function';
}
0 голосов
/ 12 июня 2018

Чтобы проиллюстрировать предыдущие ответы, вот небольшой фрагмент JSFiddle:

function test () {
console.log()

}

console.log(typeof test) // >> "function"

// implicit test, in javascript if an entity exist it returns implcitly true unless the element value is false as :
// var test = false
if(test){ console.log(true)}
else{console.log(false)}

// test by the typeof method
if( typeof test === "function"){ console.log(true)}
else{console.log(false)}


// confirm that the test is effective : 
// - entity with false value
var test2 = false
if(test2){ console.log(true)}
else{console.log(false)}

// confirm that the test is effective :
// - typeof entity
if( typeof test ==="foo"){ console.log(true)}
else{console.log(false)}

/* Expected :
function
true 
true 
false
false
*/
0 голосов
/ 01 мая 2018

Попробуйте это:

Window.function_exists=function(function_name,scope){
//Setting default scope of none is provided
If(typeof scope === 'undefined') scope=window;
//Checking if function name is defined
If (typeof function_name === 'undefined') throw new 
Error('You have to provide an valid function name!');
//The type container
var fn= (typeof scope[function_name]);
//Function type
If(fn === 'function') return true;
//Function object type
if(fn.indexOf('function')!== false) return true; 
return false;
}

Имейте в виду, что я написал это с моим мобильным телефоном Может содержать некоторые проблемы в верхнем регистре и / или другие исправления, такие как, например, имя функции

Если вы хотите, чтобы такая функция, как PHP, проверяла, установлена ​​ли переменная:

Window.isset=function (variable_con){
If(typeof variable_con !== 'undefined') return true;
return false;
}
0 голосов
/ 23 марта 2018

Вот работающее и простое решение для проверки существования функции и , которая динамически выполняет функцию другой функцией;

Функция триггера

function runDynmicFunction(functionname){ 

    if (typeof window[functionname] == "function"  ) { //check availability

        window[functionname]("this is from the function it "); //run function and pass a parameter to it
    }
}

и теперь вы можете генерировать функцию динамически, возможно, используя php как этот

function runThis_func(my_Parameter){

    alert(my_Parameter +" triggerd");
}

теперь вы можете вызывать функцию, используя динамически генерируемое событие

<?php

$name_frm_somware ="runThis_func";

echo "<input type='button' value='Button' onclick='runDynmicFunction(\"".$name_frm_somware."\");'>";

?>

точный HTML-код, который вам нужен

<input type="button" value="Button" onclick="runDynmicFunction('runThis_func');">
0 голосов
/ 16 декабря 2017

А потом есть это ...

( document.exitPointerLock || Function )();
0 голосов
/ 17 мая 2017
    function sum(nb1,nb2){

       return nb1+nb2;
    }

    try{

      if(sum() != undefined){/*test if the function is defined before call it*/

        sum(3,5);               /*once the function is exist you can call it */

      }

    }catch(e){

      console.log("function not defined");/*the function is not defined or does not exists*/
    }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...