我想避免冗餘代碼爲我的項目之一,這是一個simple logger。這個記錄器需要* .alert,* .notice等功能,我也決定給它們分配別名(.alert = .al等)。將多個相似的函數附加到原型
這導致了多個相似的功能,只有一個數字和名稱不同。
Module.protoype.emergency = Module.prototype.em = function() {
this.applyLogLevel(' + (i+1) + ', arguments);
}
作爲一種嘗試,以使該代碼庫少冗餘我創造了這個「創作者功能」:
// create logging functions
var prototypeNames = [
['emergency', 'emer', 'mrgc', 'em'],
['alert', 'aler', 'alrt', 'al'],
['critical', 'crit', 'crtc', 'cr'],
['error', 'erro', 'rror', 'er'],
['warning', 'warn', 'wrng', 'wa'],
['notice', 'noti', 'notc', 'no'],
['info', 'in'],
['debug', 'debu', 'dbug', 'de']
];
for (var i = 0; i < prototypeNames.length; i++) {
for (var j = 0; j < prototypeNames[i].length; j++) {
Module.prototype[prototypeNames[i][j]] = Module.prototype.Namespace.prototype[prototypeNames[i][j]] = new Function ('this.applyLogLevel(' + (i+1) + ', arguments);');
}
}
現在我的JavaScript棉短絨告訴我,new Function()
是eval()
一種形式。有沒有其他更好的方法來解決這個問題?
不應該是'level + 1'嗎? – Bergi
是的,它實際上應該。我只是改變了我現在使用的解決方案。 – Dodekeract