Вы можете определить другую функцию, давайте назовем ее partial
, которая привязывает некоторые дополнительные аргументы к вашей функции:
function partial( func : Function, ...boundArgs ) : Function {
return function( ...dynamicArgs ) : * {
return func.apply(null, boundArgs.concat(dynamicArgs))
}
}
Затем вы меняете свою функцию следующим образом:
private function formatDate( dataField : String, item : Object, column : DataGridColumn ) : String {
var df : DateFormatter = new DateFormatter();
df.formatString = "MM/DD/YY";
if ( column.dataField == dataField ) {
return df.format(item[dataField]);
}
return "ERR";
}
Обратите внимание, что я добавил новый аргумент с именем dataField
первым в списке аргументов и заменил все ссылки на "startDate" этим аргументом.
И используйте это так:
var startDateLabelFunction : Function = partial(formatDate, "startDate");
var endDateLabelFunction : Function = partial(formatDate, "endDate");
Функция partial
возвращает новую функцию, которая вызывает исходную функцию с параметрами от вызова до частичного объединения с параметрами новой функции ... вы со мной? Другой способ выразить это в том, что он может возвращать новую функцию, где N аргументов предварительно связаны с конкретными значениями.
Давайте пройдемся по шагам:
partial(formatDate, "startDate")
возвращает функцию, которая выглядит следующим образом:
function( ...dynamicArgs ) : * {
return func.apply(null, boundArgs.concat(dynamicArgs));
}
но func
и boundArgs
- это то, что вы передали в качестве аргументов partial
, так что вы можете сказать, что это выглядит так:
function( ...dynamicArgs ) : * {
return formatDate.apply(null, ["startDate"].concat(dynamicArgs));
}
, который, когда он вызывается, будет более или менее таким же, как этот
function( item : Object, column : DataGridColumn ) : * {
return formatDate("startDate", item, column);
}
Тад!