Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #1 (permalink)  
Старый 17.11.2014, 13:15
Профессор
Отправить личное сообщение для Dorian_bs Посмотреть профиль Найти все сообщения от Dorian_bs
 
Регистрация: 24.03.2011
Сообщений: 217

Вызов функции в hash-массиве
Всем привет!

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

То есть по сути, зная путь, необходимо выполнить функцию.

Строка:
'test.test2.test3.test4';

Функция:
var test = {
   test2: {
      test3: {
         test4: function () {alert();}
      }
   }
};


То есть возможно есть какая то альтернатива eval?

eval('test.test2.test3.test4')();
Ответить с цитированием
  #2 (permalink)  
Старый 17.11.2014, 13:22
Аватар для ksa
ksa ksa вне форума
CacheVar
Отправить личное сообщение для ksa Посмотреть профиль Найти все сообщения от ksa
 
Регистрация: 19.08.2010
Сообщений: 14,215

Сообщение от Dorian_bs
зная путь, необходимо выполнить функцию
Как вариант...

var test = {
	test2: {
		test3: {
			test4: function () {alert('Ok');}
		}
	}
};
var str='test.test2.test3.test4';
var a=str.split('.');
var fnc=window;
for (i=0; i<a.length; i++) {
	fnc=fnc[a[i]];
};
fnc();

Без рекурсии...
Ответить с цитированием
  #3 (permalink)  
Старый 17.11.2014, 13:27
Профессор
Отправить личное сообщение для Dorian_bs Посмотреть профиль Найти все сообщения от Dorian_bs
 
Регистрация: 24.03.2011
Сообщений: 217

ksa, Огромное спасибо! ))))
Ответить с цитированием
  #4 (permalink)  
Старый 17.11.2014, 13:34
Аватар для ruslan_mart
Профессор
Отправить личное сообщение для ruslan_mart Посмотреть профиль Найти все сообщения от ruslan_mart
 
Регистрация: 30.04.2012
Сообщений: 3,018

ksa, блин, пока я писал - ты уже написал.

http://learn.javascript.ru/play/2tw4z

<!DOCTYPE HTML>
<html>
  
  <head></head>
  
  <body>
    <script>
      Object.prototype.getByString = function(elems) {
        var self = this, i;
        elems = elems.split('.');
        for(i=0; i<elems.length; i++) {
          self = self[elems[i]];
          if(!self) return;
        }
        return self;
      };
      
      var test = {
        test2: {
          test3: {
            test4: function () {
              alert(123);
            }
          }
        }
      };
      
      test.getByString('test2.test3.test4')();
      
    </script>
  </body>

</html>
Ответить с цитированием
  #5 (permalink)  
Старый 17.11.2014, 13:37
Аватар для ksa
ksa ksa вне форума
CacheVar
Отправить личное сообщение для ksa Посмотреть профиль Найти все сообщения от ksa
 
Регистрация: 19.08.2010
Сообщений: 14,215

Ruslan_xDD, твой вариант будет шибче!
Ответить с цитированием
  #6 (permalink)  
Старый 17.11.2014, 13:40
Профессор
Отправить личное сообщение для Dorian_bs Посмотреть профиль Найти все сообщения от Dorian_bs
 
Регистрация: 24.03.2011
Сообщений: 217

Ruslan_xDD,
Спасибо большое, ребята ))
Ответить с цитированием
Ответ



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

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


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Повторный вызов функции TorchTT Общие вопросы Javascript 4 20.03.2014 21:20
Вызов функции при отображении BrainFuck Events/DOM/Window 1 10.09.2013 10:41
Вызов функции из скрытого iframe Beer75 Общие вопросы Javascript 2 05.06.2013 21:36
Вызов функции дочернего окна mgluhov Events/DOM/Window 18 16.07.2012 23:05
Двойной вызов функции Tmin10 jQuery 8 08.12.2011 15:19