2015-05-18 3 views
0

говорят, у меня есть функция:добавления аргументов в функцию перед вызовом этой функции - Node.js

function foo(){ 
console.log(arguments); 
} 

process.nextTick(foo); 

как я могу применить аргументы Foo в process.nextTick() вызова?

как я делаю что-то вроде

// псевдокод

var args = []; 
process.nextTick(foo.addArgs(args)); 

... но без вызова Foo?

+1

w/Array: 'Function.apply.bind (foo, null, ['arg1', 'arg2', 'arg3'])' – dandavis

ответ

3

Есть несколько возможностей. Для первых нескольких вариантов я (возможно, ошибочно) предполагаю, что вы не пропустите args как один параметр массива. Если вы хотите, чтобы каждый элемент args был отдельным аргументом для foo(), см. Последний пример (с использованием apply()).

Предполагая, что вы не используете this внутри foo(), вот несколько вариантов:

process.nextTick(function() { 
    foo(args); 
}); 

Или:

var bar = foo.bind(null, args); 
process.nextTick(bar); 

Если вы используете this внутри foo(), изменить null в приведенном выше примере к стоимости, которую вы ожидаете, this. Например:

var bar = foo.bind(foo, args); 
process.nextTick(bar); 

Вы можете также хотел бы посмотреть на call() и apply(). apply() особенно полезно, если вы хотите иметь массив (скажем, [1, 2, 7]), который вы хотите разложить по функциональной арг (то есть, foo(1, 2, 7) вместо foo([1, 2, 7])):

process.nextTick(function() { 
    foo.apply(null, args); 
} 

Как bind(), если вы используйте this внутри foo, а затем измените null в приведенном выше примере, чтобы быть тем значением, которое вы ожидаете. this.

+0

кажется довольно законным –

2

Вы можете сделать это с анонимной функцией:

var args = []; 
process.nextTick(function(){ 
    foo.apply(foo, args); 
}); 
+0

Это самое простое решение, но я хочу знать другие способы сделать это также –

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