Поэтому я пытаюсь понять, как правильно использовать приложение с объектами и аргументами, вместо использования операторов if else.
Мой текущий код:
var log = function(call, name) {
return function(a, b, c) {
if (c === undefined) {
console.log(name + "(" + a + b + ")" + "=" + call(a, b));
} else {
console.log(name + "(" + a + b + c + ")" + "=" + call(a, b, c));
}
}
};
//Includes two call functions
EDIT: более читаемый
Если вы хотите использовать apply
, то вы просто вызовите apply
с первым параметром как null
а второй параметр - в список аргументов:
console.log(name + "(" + a + "," + b + "," + c + ")" + "=>" + callback.apply(null, [a, b, c]));
var wrapLog = function(callback, name) {
return function(a, b, c) {
console.log(name + "(" + a + "," + b + "," + c + ")" + "=>" + callback.apply(null, [a, b, c]));
}
};
var area = function(x, y) { //don't change this function
return x * y;
};
var logArea = wrapLog(area, "area");
logArea(5, 3); // area(5, 3) => 15
logArea(3, 2); // area(3, 2) => 6
var volume = function(x, y, z) { //don't change this function
return x * y * z;
};
var logVolume = wrapLog(volume, "volume");
logVolume(5, 3, 2); // volume(5, 3, 2) => 30
logVolume(3, 2, 4); // volume(3, 2, 4) => 24
Но вы можете рассмотреть возможность преобразования аргументов в функцию, возвращаемую wrapLog
в массив в самих параметрах для минимального синтаксического шума:
return function(...args) {
console.log('${name}(${args}) => ${callback.apply(null, args)}');
}
var wrapLog = function(callback, name) {
return function(...args) {
console.log('${name}(${args}) => ${callback.apply(null, args)}');
}
};
var area = function(x, y) { //don't change this function
return x * y;
};
var logArea = wrapLog(area, "area");
logArea(5, 3); // area(5, 3) => 15
logArea(3, 2); // area(3, 2) => 6
var volume = function(x, y, z) { //don't change this function
return x * y * z;
};
var logVolume = wrapLog(volume, "volume");
logVolume(5, 3, 2); // volume(5, 3, 2) => 30
logVolume(3, 2, 4); // volume(3, 2, 4) => 24
console.log(name + "(" + [].join.call(arguments, ",") + ")=>" + callback.apply(null, arguments));
Function.name
вместо того, чтобы передавать имя функции. Вы также можете использовать синтаксис распространения (илиapply
в вашем случае) для передачи аргументов.