不确定标题是否很好地描述了我的问题,但在这里我们继续。 我有一个函数(f1)做了一些处理,并使用另一个函数f2作为参数。实际上,f2在f1中被“注入”,因此f2的“签名”可以不同(例如f2可能有或没有某个参数)。我想知道什么是尽可能通用的代码的最佳方式?Javascript:以函数作为参数调用函数
在这里,我们走的代码,这将更好地解释它。 遍历是我的f1函数,并扫描对象中的所有键。对于每个键,它都会执行某些操作 - 该活动由“注入”的f2执行。在下面的示例代码中,我的函数f2用另一个键名替换了一个键名(这里的“lastname”用“theLastname”)。目前编写的方式不是非常通用的,因为我必须编写f1中的关键字。另外,说我有一个简单的f2函数,只需要键名记录它没有参数?
// f2 function
function replaceKey(object,keyname,newKeyname) {
if (object.hasOwnProperty(keyname)){
object[newKeyname] = object[keyname];
delete data[keyname];
}
return object;
};
// f1 function
function traverse(o,doF) {
for (var i in o) {
doF('key : ' + i + ', value: ' + o[i]);
if (o[i] !== null && typeof(o[i])==="object") {
//going on step down in the object tree!!
traverse(o[i],doF);
} else {
doF(o,"lastname","theLastname"); // this is dependant on f2 signature - would like to make it more generic
}
}
return o;
};
traverse(userList,replaceKey);
我想吃点什么是一样的东西:
// f1 function
function traverse(o,doF) {
for (var i in o) {
doF('key : ' + i + ', value: ' + o[i]);
if (o[i] !== null && typeof(o[i])==="object") {
//going on step down in the object tree!!
traverse(o[i],doF);
} else {
doF(o);
}
}
return o;
};
所以,我可以有:
traverse(userList,replaceKey);
traverse(userList,log);
不知道如何写它做的F1独立的f2“签名”?
感谢您的帮助!
不知道您要做什么。什么是'doF'(即'replaceKey')应该只用一个参数? – Blorgbeard
'delete data [keyname];' - 应该是'delete object [keyname];' –