#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