2014-02-02 3 views
0

У меня есть объект и 3 метода, теперь мой код, чтобы выполнить это выглядит следующим образом:как выполнять несколько функций с теми же аргументами JS

var cmpAmount = 50, 
    addLessAmount = 6, 
    addMoreAmount = 14; 
priceChanger.changeSmallPrice(cmpAmount, addLessAmount, addMoreAmount); 
priceChanger.changeBigPrice(cmpAmount, addLessAmount, addMoreAmount); 
priceChanger.changeTooltipPrice(cmpAmount, addLessAmount, addMoreAmount); 

так, если аргументы такие же, как выполнить его три с отправив им параметры. Я имею в виду, как изменить свой код, чтобы уменьшить его.

+0

Может быть, есть что-то неправильно в вашем коде, я думаю, не следуя принципу DRY. –

+1

'priceChanger.changeAllPrices'? – Prinzhorn

+0

Как насчет создания одной функции в вашем объекте, которая выполняет остальные три, просто передайте массив аргументов. – adeneo

ответ

1

Я думаю, что было бы лучше, чтобы сделать метод «changeAllPrices (cmpAmount, addLessAmount, addMoreAmount)»

0

Может быть с помощью объекта сохранять все свойства:

var args = {cmpAmount:50,addLessAmount: 6, addMoreAmount: 14}; 

priceChanger.changeSmallPrice(args); 
priceChanger.changeBigPrice(args); 
priceChanger.changeTooltipPrice(args); 
0

Вы можете использовать простой помощник функцию, такую ​​как приведенную ниже, для вызова каждой функции с массивом аргументов. Я считаю, что некоторые JavaScript библиотеки включают в себя подобную функцию композиции под названием composeArgs

function execute(fns, args) { 
    for(var i = 0; i < fns.length; i++) { 
     fns[i].apply(this, args); 
    } 
} 

Затем вызовите выполнить

var cmpAmount = 50, 
    addLessAmount = 6, 
    addMoreAmount = 14; 

execute([priceChanger.changeSmallPrice, priceChanger.changeBigPrice, priceChanger.changeTooltipPrice], 
     [cmpAmount, addLessAmount, addMoreAmount]); 
Смежные вопросы