您可以定义另一个函数,我们称之为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));
}
当它被调用时,它或多或少与 this 相同
function( item : Object, column : DataGridColumn ) : * {
return formatDate("startDate", item, column);
}
多田!