Я следовал за этой руководство]1, чтобы создать новый 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, после чего не загружается. Ошибки поджигатель с
У меня.onChange, после не функция
Я хочу, чтобы ухудшить изящно, потому что это не самая важная функция в моей программе. оператора typeof
дает ту же ошибку.
Любые предложения о том, как убедиться, что он существует и тогда только выполнить onChange, после
?
(Ни один из методов, описанных ниже, кроме как попробовать поймать одну работу)
Попробуйте что-то вроде этого:
if (typeof me.onChange !== "undefined") {
// safe to use the function
}
или еще лучше (как в UpTheCreek голосуют комментарий)
if (typeof me.onChange === "function") {
// safe to use the function
}
Я имел эту проблему.
if (obj && typeof obj === 'function') { ... }
бросил ссылку ошибка, если obj оказался неопределенным.
В итоге я сделал следующее:
if (typeof obj !== 'undefined' && typeof obj === 'function') { ... }
Коллега указал мне на то, что проверки, если это'ы `!== 'не определено'", а затем " = = = 'функция' - это конечно излишне.
Проще:
if (typeof obj === 'function') { ... }
Намного чище и работает отлично.
Если вы're через eval, чтобы преобразовать строку в функцию, и вы хотите проверить, если это ивала'д способ существует, вы'll хочу использовать для вызова typeof и функцию строки внутри оценки:
var functionString = "nonexsitantFunction"
eval("typeof " + functionString) // returns "undefined" or "function"
Дон'т повернуть вспять эту и попробовать для вызова typeof на ивал. Если вы делаете ReferenceError будет брошен:
var functionString = "nonexsitantFunction"
typeof(eval(functionString)) // returns ReferenceError: [function] is not defined
Как насчет:
if('functionName' in Obj){
//code
}
например
var color1 = new String("green");
"length" in color1 // returns true
"indexOf" in color1 // returns true
"blablabla" in color1 // returns false
или как в вашем случае:
if('onChange' in me){
//code
}
См. МДН документы.
Я'т вижу этого предложил: меня.onChange, после чего и усилитель; & мной.onChange, после чего(ул.);
В основном, если меня.onChange, после неопределено (что будет, если он еще'т было возбуждено), то он выиграл'т выполнение последней части. Если мне.onChange, после это функция, он будет казнить меня.onChange, после чего(ул.).
Вы можете даже пойти дальше и сделать:
me && me.onChange && me.onChange(str);
в случае, если мне это асинхронные, а также.
Попробуйте оператора typeof
-- искать 'не определено'
чтобы сказать, что он не'т, 'функция'
для функции. [JSFiddle для этого код][1]
function thisishere() {
return false;
}
alert("thisishere() is a " + typeof thisishere);
alert("thisisnthere() is " + typeof thisisnthere);
Или как если:
if (typeof thisishere === 'function') {
// function exists
}
Или с возвращаемым значением в одной строке:
var exists = (typeof thisishere === 'function') ? "Value if true" : "Value if false";
var exists = (typeof thisishere === 'function') // Returns true or false
//Simple function that will tell if the function is defined or not
function is_function(func) {
return typeof window[func] !== 'undefined' && $.isFunction(window[func]);
}
//usage
if (is_function("myFunction") {
alert("myFunction defined");
} else {
alert("myFunction not defined");
}
В Underscore.js библиотека определяет его в isFunction способ, как этот (где комментарии предполагают, могут удовлетворить некоторые баги в браузерах)
typeof obj == 'function' || false
Мне нравится использовать этот метод:
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
}
function js_to_as( str ){
if (me && me.onChange)
me.onChange(str);
}
Без каких-либо условий
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);
}
Я подозреваю, что " я " не получает правильно назначенные события onload.
Перемещение get_ID вызов события onclick должен заботиться о нем.
Очевидно, что вы можете еще ловушка как упоминалось ранее:
function js_to_as( str) {
var me = get_ID('jsExample');
if (me && me.onChange) {
me.onChange(str);
}
}
У меня был случай, когда имя функции, разнообразны по переменной (var 'х' в данном случае) добавляется к имени функции. Это работает:
if ( typeof window['afunction_'+x] === 'function' ) { window['afunction_'+x](); }
Этот простой код jQuery следует сделать трюк:
if (jQuery.isFunction(functionName)) {
functionName();
}
Я пробовала принято отвечать; однако:
console.log(typeof me.onChange);
возвращает 'не определено'. Я'вэ заметил, что согласно спецификации мероприятие под названием 'onChange, после чего' вместо 'onChange, после чего' (заметьте верблюжьего).
Изменение первоначальной принято отвечать на следующие работал для меня:
if (typeof me.onchange === "function") {
// safe to use the function
}
function function_exists(function_name)
{
return eval('typeof ' + function_name) === 'function';
}
alert(function_exists('test'));
alert(function_exists('function_exists'));
Или
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';
}
Поставить двойной восклицательный знак я.е !! перед именем функции, которую вы хотите проверить. Если он существует, он будет возвращать true.
function abc(){
}
!!window.abc; // return true
!!window.abcd; // return false