2015-02-24 4 views
0

Я пишу программу javascript, и я хочу иметь возможность хранить вызовы функций, которые создают 3D-объекты внутри массива. Я хочу, чтобы иметь возможность поставитьСохранение вызова функции внутри массива

draw_cylinder(0,0,3,2); 
draw_sphere(0,0,5,3); 
draw_cone(17,0,7,3); 
draw_cube(-1,-1,2, 1,1,3); 

в массив shapes[], а затем в конечном итоге запустить программу и каждая функция вызывается из массива.

+0

Почему вы не создаете массив объектов и внутри каждого объекта не сортируете значения, необходимые для выполнения манипуляций? Поэтому, как только вам нужно «запустить» программу, вы получите доступ к значениям и сможете выполнить ничью. – britter

+0

Планируете ли вы использовать ['eval()'] (https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/eval), затем? –

ответ

1

Моя первая мысль была бы:

var a = []; 

a.push(function(){ draw_cylinder(0, 0, 3, 2); }); 
a.push(function(){ draw_sphere(0, 0, 5, 3); }); 
a.push(function(){ draw_cone(17, 0, 7, 3); }); 
a.push(function(){ draw_cube(-1, -1, 2, 1, 1, 3); }); 

for(var i = 0; i < a.length; i++){ 
    a[i](); 
} 
+0

Спасибо! Я не думал о том, чтобы поставить 'function()' перед каждым вызовом – cwendel

1

Хотите иметь функции, доступные в массиве или вызовы функций с этими конкретными значениями?

Просто иметь звонки, вы можете сделать:

var a = []; 
a.push(draw_cylinder); 
a.push(draw_sphere); 
a.push(draw_cone); 
a.push(draw_cube); 

a[2](17,0,7,3); 

Если вы хотите последнего, вы хотели бы использовать bind снискать функцию:

var a = []; 
a.push(draw_cylinder.bind(null, 0, 0, 3, 2)); 
a[0](); // will do whatever draw_cylinder(0,0,3,2) does 

Карринг функции - http://www.crockford.com/javascript/www_svendtofte_com/code/curried_javascript/index.html

Связывание документации - https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Function/bind

+0

Учитывая, что ОП сформулировал вопрос, я думаю, что вызов должен быть больше похож на 'a.forEach (i => i())' – ssube

+1

[_Technically_ ] (http://xkcd.com/1475/), bind не делает _currying_ это просто _partial application_. Какими средствами currying является преобразование функции 'f':' f (a, b, c, d) -> e', которая принимает параметры (скажем, a, b, c, d) и возвращает 'e' и превращает их в функция 'f (a) -> (b) -> (c) -> (d) -> (e)' - которая заполняет каждый параметр, возвращает новую функцию. Передача параметров в карриную функцию является формой частичного приложения, но они не являются синонимами. –

+0

Хм, я думаю, ты прав, хотя ... Ох! камень с ископаемым в нем! – javinor

Смежные вопросы