JavaScript определяет, существует ли функция с динамическим именем

#javascript

#javascript

Вопрос:

Как я могу проверить, существует ли динамически именованный объект или функция?

В примере:

 var str = 'test';
var obj_str = 'Page_' str;

function Page_test(){

}

if(typeof obj_str() == 'function') alert('ok');
else alert('error');
  

Тогда как я могу вызвать объект?

В примере:

 var tst = obj_str();
  

Комментарии:

1. Когда вы вызываете функцию на основе чего-либо специфичного для страницы (например, заголовка или URL), вы ссылаетесь на динамическую функцию, строку или объект. Это отличный способ получить что-то вроде субъективной проверки формы, когда некоторые формы требуют проверки, хотя и не все формы.

Ответ №1:

Вы можете получить глобальную по ее имени, написав window[obj_str] .

ДЕМОНСТРАЦИЯ.

Комментарии:

1. если объект существует.. как я могу определить, использовать это? вызвать ее?

2. Путем записи window[obj_str] . Например: var result = window[obj_str](); .

3. здесь я получаю ‘undefined’… var Obj = window[‘Page_test’]; оповещение(Obj());

4. @clarkk: Это потому, что ваша функция ничего не возвращает.

5. она действительно что-то возвращает.. «Объект не определен»

Ответ №2:

Вы были близки к этому, но не пытайтесь вызывать obj_str (это просто строка, ее нельзя вызвать); вместо этого используйте ее для поиска свойства window (поскольку все глобальные функции и глобальные переменные являются свойствами window ):

 if(typeof window[obj_str] == 'function') alert('ok');
//               ^-- No (), and use `window`
else alert('error');
  

Если вас не волнует, что это конкретно функция:

 if (obj_str in window) alert('ok');
else alert('error');
  

in Оператор проверяет, соответствует ли данная строка имени свойства в данном объекте (в данном случае, является ли содержимое obj_str свойством в window ).

Ответ №3:

Ваш пример правильный, за исключением того, что уберите скобку после obj_str() :

 if(typeof obj_str != 'undefined') alert('ok');
else alert('error');
  

Это немного правильнее, чем window[obj_str] потому что obj_str может быть определен в локальном замыкании или, если у вас есть вложенные замыкания, в содержащем замыкании, но не в самом window.

Ответ №4:

если вы запускаете свой код в браузере, просто получите доступ к глобальному объекту с помощью window , вашему коду может понравиться это:

 if (typeof window[obj_str] === 'string') {
    alert('ok');
}
  

в противном случае вы должны получить доступ к глобальному объекту:

 var global = function() { return this; }() || (1,eval)('this');
if (typeof global[obj_str] === 'stribg