Javascript-форум (https://javascript.ru/forum/)
-   Общие вопросы Javascript (https://javascript.ru/forum/misc/)
-   -   Вызов функции в hash-массиве (https://javascript.ru/forum/misc/51724-vyzov-funkcii-v-hash-massive.html)

Dorian_bs 17.11.2014 13:15

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

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

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

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

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


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

eval('test.test2.test3.test4')();

ksa 17.11.2014 13:22

Цитата:

Сообщение от 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();

Без рекурсии...

Dorian_bs 17.11.2014 13:27

ksa, Огромное спасибо! :)))))

ruslan_mart 17.11.2014 13:34

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>

ksa 17.11.2014 13:37

Ruslan_xDD, твой вариант будет шибче! ;)

Dorian_bs 17.11.2014 13:40

Ruslan_xDD,
Спасибо большое, ребята :)))


Часовой пояс GMT +3, время: 01:29.