2013-09-27 4 views
2

Я работаю с очень плохо документированным API-интерфейсом JavaScript и должен писать функции обратного вызова, где аргументы не были документированы. В качестве шага открытия, мне нужно, чтобы проверить, что получает прошло. Если я знаю, что есть только один вход можно установить функцию обратного вызова, чтобы бытьИзучение неизвестного количества входов функции javascript

function(stuff){ 
    console.log(stuff); 
} 

и работать оттуда. Есть ли элегантный способ проверки материалов, когда я не знаю, сколько их есть? Я мог бы сделать что-то вроде

function(a,b,c,d,e,f){ 
    console.log(a) 
    console.log(b) // is this undefined? 
    console.log(c) // how about now? 
     .... 
    console.log(f) // if this isn't undefined I need to do it again with more args 
} 

и он будет работать нормально, но это довольно уродливо. Есть ли более простой способ узнать, сколько аргументов было передано функции?

ответ

6

Оберните arguments объект:

function f(){ 
    for(var prop in arguments) { 
     console.log(arguments[prop]); 
    } 
} 
f(1); // logs 1 
f(1, 2); // logs 1, then 2 

Как arguments массив-подобный объект, вы можете перебирать его с регулярной for петли, на основе его length собственности:

for(var i=0; i<arguments.length; i++) { 
    console.log(arguments[i]); 
} 
+1

Что вы имеете в виду? Не являются ли имена свойств на 'arguments' именно их индексами? – bfavaretto

3

Это похоже, что вы после arguments, который дает вам массив аргументов, переданных текущей функции:

var f = function() { 
    console.log(arguments); 
} 
f(1, '2'); 
f(1, 2, 3, 4, 5); 

(Fiddle)

1

Используйте аргументы

function unknown() { 
    for (var i=0;i<arguments.length;i++) { 
    console.log('arg '+i+' : ',arguments[i]); 
    } 
} 

unknown(123, 'test', [1, 2, 3]); 


arg 0 : 123 
arg 1 : test 
arg 2 : [1, 2, 3] 
Смежные вопросы