不確定標題是否很好地描述了我的問題,但在這裏我們繼續。 我有一個函數(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];' –