Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #1 (permalink)  
Старый 20.11.2014, 23:38
ild ild вне форума
Аспирант
Отправить личное сообщение для ild Посмотреть профиль Найти все сообщения от ild
 
Регистрация: 27.02.2012
Сообщений: 67

часть имени функции в переменной
Добрый вечер.
Есть функция xxx_myfunc(){}.
Так вот xxx постоянно меняется. Зато его есть в глобальной переменной name.
Не могу сообразить, как вызвать эту функцию?
Типа:
name+'_myfunc'();
Ответить с цитированием
  #2 (permalink)  
Старый 20.11.2014, 23:49
Профессор
Посмотреть профиль Найти все сообщения от krutoy
 
Регистрация: 09.11.2014
Сообщений: 610

eval(name+"_myfunc()")
foo_func=function(){alert("foo")}
bar_func=function(){alert("bar")}

name="foo"
eval(name+"_func()")
name="bar"
eval(name+"_func()")

Это чтоли надо?
без eval:
foo_func=function(){alert("foo")}
bar_func=function(){alert("bar")}
  
name="foo"
call_func=function(){
   window[name+"_func"]()
}
call_func()
name="bar"
call_func()
//  foo
//  bar

Последний раз редактировалось krutoy, 21.11.2014 в 00:58.
Ответить с цитированием
  #3 (permalink)  
Старый 20.11.2014, 23:51
Аватар для bes
bes bes вне форума
Профессор
Отправить личное сообщение для bes Посмотреть профиль Найти все сообщения от bes
 
Регистрация: 22.03.2012
Сообщений: 3,744

Сообщение от ild
Не могу сообразить, как вызвать эту функцию?
не очень хорошая затея

var n = 1;
function some_myfunc() {
	alert("good job " + n);
	n++;
}
var name = "some";
var funcName = name + "_myfunc";
window[funcName]();
eval(funcName)();
Ответить с цитированием
  #4 (permalink)  
Старый 21.11.2014, 00:03
ild ild вне форума
Аспирант
Отправить личное сообщение для ild Посмотреть профиль Найти все сообщения от ild
 
Регистрация: 27.02.2012
Сообщений: 67

спасибо всем
Ответить с цитированием
  #5 (permalink)  
Старый 21.11.2014, 00:37
Профессор
Посмотреть профиль Найти все сообщения от krutoy
 
Регистрация: 09.11.2014
Сообщений: 610

bes,
Я не совсем понял смысл Вашего примера (кстати, в ноде Ваш код не работает, работает, если использовать FE -- это к слову), ведь ТС сказал, что xxx-часть ф-ции меняется, а у вас
some_myfunc=function () {
    alert("some");
}
another_myfunc=function(){
    alert("another")
}
var name = "some";
funcName = name + "_myfunc";
window[funcName]();
eval(funcName)()
name="another"
window[funcName]();
eval(funcName)()

//  some
//  some
//  some
//  some

И особенно непонятно:
eval(funcName)()
Это то же самое, что
funcName()
Зачем там eval нужен?

Последний раз редактировалось krutoy, 21.11.2014 в 00:49.
Ответить с цитированием
  #6 (permalink)  
Старый 21.11.2014, 00:54
Профессор
Посмотреть профиль Найти все сообщения от krutoy
 
Регистрация: 09.11.2014
Сообщений: 610

ild,
Если Вы хотите без eval, я добавил вариант в первый ответ, на всякий случай.

Последний раз редактировалось krutoy, 21.11.2014 в 00:57.
Ответить с цитированием
  #7 (permalink)  
Старый 21.11.2014, 10:02
Аватар для ruslan_mart
Профессор
Отправить личное сообщение для ruslan_mart Посмотреть профиль Найти все сообщения от ruslan_mart
 
Регистрация: 30.04.2012
Сообщений: 3,018

ild, eval не стоит использовать. Либо через window, либо все ф-ции засунуть в объект и обращаться к ним таким образом:

var obj = {
    test: function() {
        alert(1);
    },
    foo: function() {
        alert(2);
    }
};


var name = 'test';
obj[name]();

var name2 = 'foo';
obj[name2]();
Ответить с цитированием
  #8 (permalink)  
Старый 21.11.2014, 17:51
Аватар для bes
bes bes вне форума
Профессор
Отправить личное сообщение для bes Посмотреть профиль Найти все сообщения от bes
 
Регистрация: 22.03.2012
Сообщений: 3,744

Сообщение от krutoy
кстати, в ноде Ваш код не работает, работает, если использовать FE -- это к слову
поясни о чём ты

Сообщение от krutoy
bes,
Я не совсем понял смысл Вашего примера (...), ведь ТС сказал, что xxx-часть ф-ции меняется, а у вас
там показано два способа вызова для одной функции с учётом наличия xxx-части, сколько функций далее создавать по этому принципу непринципиально


а если так?
some_myfunc=function () {
    console.log("some");
}
another_myfunc=function(){
    console.log("another")
}
var name = "some";
funcName = name + "_myfunc";
window[funcName]();
eval(funcName)()

name="another" 
funcName = name + "_myfunc";
window[funcName]();
eval(funcName)()

//  some
//  some
//  another
//  another



Сообщение от krutoy
И особенно непонятно:
eval(funcName)()
Это то же самое, что
funcName()
Зачем там eval нужен?
а сам тогда зачем написал? наверное потому, что не получилось строку как функцию вызывать

в общем, Ruslan_xDD, показал как рекомендуется делать
Ответить с цитированием
  #9 (permalink)  
Старый 21.11.2014, 17:55
Аватар для bes
bes bes вне форума
Профессор
Отправить личное сообщение для bes Посмотреть профиль Найти все сообщения от bes
 
Регистрация: 22.03.2012
Сообщений: 3,744

Сообщение от krutoy Посмотреть сообщение
eval(name+"_myfunc()")
без eval:
foo_func=function(){alert("foo")}
bar_func=function(){alert("bar")}
  
name="foo"
call_func=function(){
   window[name+"_func"]()
}
call_func()
name="bar"
call_func()
//  foo
//  bar
упс
(function () {
var foo_func=function(){alert("foo")}
var bar_func=function(){alert("bar")}
  
name="foo"
call_func=function(){
   window[name+"_func"]()
}
call_func()
name="bar"
call_func()
//  foo
//  bar
})();
Ответить с цитированием
  #10 (permalink)  
Старый 21.11.2014, 19:14
Профессор
Посмотреть профиль Найти все сообщения от krutoy
 
Регистрация: 09.11.2014
Сообщений: 610

Сообщение от bes
а если так?
Что это? Вы просто дублируете код. В вашем случае можно сразу эти функции обычным образом создавать. В вашем случае эти сборки не имеют никакого смысла.
Сообщение от bes
а сам тогда зачем написал?
Что написал? В моем случае eval выполняет строку. Зачем эвалить скомпилированную функцию, если ее и так можно вызвать?
Ответить с цитированием
Ответ



Опции темы Искать в теме
Искать в теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
получение значения переменной из функции java script valdur2000 Общие вопросы Javascript 1 14.11.2013 20:22
Скобки после имени функции. В чем разница, если они есть и если их нет? jsuse Общие вопросы Javascript 2 19.11.2011 16:11
изменение значения глобальной переменной внутри функции mgmarket Серверные языки и технологии 14 13.09.2011 00:56
изменение переменной в функции ananax Общие вопросы Javascript 19 12.01.2011 12:09
Переменная от переменной или как к имени переменной конкатенировать значение другой Aderba jQuery 5 12.11.2008 15:25