Javascript-форум (https://javascript.ru/forum/)
-   Общие вопросы Javascript (https://javascript.ru/forum/misc/)
-   -   Генерация и зацпск цепных функций (https://javascript.ru/forum/misc/46279-generaciya-i-zacpsk-cepnykh-funkcijj.html)

Tek 04.04.2014 10:52

Генерация и зацпск цепных функций
 
Есть задача создавать цепные функции и запускать (из json). На ум приходит только eval. Подскажите есть ли более элегантный способ?

ksa 04.04.2014 10:55

Цитата:

Сообщение от Tek
На ум приходит только eval. Подскажите есть ли более элегантный способ?

Как вариант...

function test(){
	alert('Ok');
};
window['test']();

Tek 04.04.2014 11:10

Боюсь вариант не подойдет, запускать нужно из blackbox объекта (TweenLineMax.js библиотеки), да ещё и передавать в каждый метод ряд параметров

ksa 04.04.2014 11:15

Цитата:

Сообщение от Tek
запускать нужно из blackbox объекта (TweenLineMax.js библиотеки)

Это мне мало о чем говорит...

Задачки всегда удабнее решать следующим образом:
- у меня есть вот "это"
- как имея "это", сделать "то-то"

Цитата:

Сообщение от Tek
да ещё и передавать в каждый метод ряд параметров

Передавай их сколько душа пожелает... :) В этом нет никаких ограничений.

Tek 04.04.2014 11:33

Ну может быть на примере будет понятнее http://codepen.io/Tek/pen/jbocH?editors=001

ksa 04.04.2014 13:30

Цитата:

Сообщение от Tek (Сообщение 306006)
Ну может быть на примере будет понятнее http://codepen.io/Tek/pen/jbocH?editors=001

С таким набором мало что сделать...

Tek 04.04.2014 13:46

т.е. оставаться только eval? :(

nerv_ 04.04.2014 13:47

изменить формат json. Кстати, это даже не json :)

Tek 04.04.2014 13:58

Цитата:

Сообщение от nerv_ (Сообщение 306044)
изменить формат json. Кстати, это даже не json :)

а на что изменить? (а главное потом запустить). Изначально думал, из json создавать объект который пропускаю через метод который исполняет код.

ksa 04.04.2014 14:59

Цитата:

Сообщение от Tek
а на что изменить?

На что-то типа такого...

var a=[
	{
		name: 'имя метода1',
		args: ['значение1',...,'значениеN1']
	},
	{
		name: 'имя метода2',
		args: ['значение1',...,'значениеN2']
	}
];

Tek 04.04.2014 15:20

так и планировал, только как потом вызвать все это без eval..

ksa 04.04.2014 15:24

Цитата:

Сообщение от Tek
только как потом вызвать все это без eval

Что-то типа такого...

var a=[
	{
		name: 'имя метода1',
		args: ['значение1',...,'значениеN1']
	},
	{
		name: 'имя метода2',
		args: ['значение1',...,'значениеN2']
	}
];
window[a[0].name](a[0].args[0],...,a[0].args[N]);

Sweet 04.04.2014 15:31

Цитата:

Сообщение от Tek
как потом вызвать все это без eval

.apply же:
var a=[
    {
        name: 'имя метода1',
        args: ['значение1',...,'значениеN1']
    },
    {
        name: 'имя метода2',
        args: ['значение1',...,'значениеN2']
    }
];

a.forEach(function (item) {
    this[item.name].apply(this, item.arguments);
}, window/*или что-нибудь ещё, где методы хранятся*/);

jsnb 04.04.2014 15:32

Так а что мешает циклом пройтись и последовательно вызвать все методы, сохраняя промежуточные результаты?

ksa 04.04.2014 15:36

Цитата:

Сообщение от jsnb
Так а что мешает циклом пройтись и последовательно вызвать все методы, сохраняя промежуточные результаты?

Никаких помех нет - вольному воля! :D

Tek 04.04.2014 15:38

Всем спасибо за ответы, будут побывать.


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