Търсих малко и измислих .apply () и .call (), но изглежда не се държат така, както ми трябва.
Кажи, че съм
function example(someparam, anotherparam, finalparam){
}
Мога ли да динамично да го предам на масивсъответстват на тези параметри? Такова, че ако се опитвах да предам value1 на "someparam", value2 на "anotherparam", а value3 на "finalparam", бих могъл да го направя с масив като [value1, value2, value3]?
Кажете, ако тези стойности са:
valueArray = [value1, value2, value3];
Мислех, че може да се направи
example.apply(valueArray);
Това възможно ли е? Разбирам, че е възможно да се справят с параметрите динамично чрез преминаване на обекти, но имам нужда от това, за да не се изисква целевата функция да очаква обект.
Отговори:
1 за отговор № 1Кодът ви е непълен ... можете да използвате
example.apply(this, valueArray);
0 за отговор № 2
Функциите на Javascript могат да предават произволен брой параметри, останалите ще бъдат просто неопределени.
В примерната функция, която можете да използвате arguments.length
, Ако е 1, предположим, че сте били предавани масив стрите стойности. В противен случай продължете както обикновено. Можете също така просто да проверите типа на първия параметър или да проверите типа на последните два. Нещо като:
function example(someparam, anotherparam, finalparam){
if(typeof someparam === "Array") {
finalparam = someparam[2];
anotherparam = someparam[1];
someparam = someparam[0];
}
//continue as normal
}
Ако не можете да промените функцията, тогава можете просто да използвате example.apply(undefined, valueArray)
.