К сожалению, вы не можете сделать это в JavaScript, язык не поддерживает концепцию «нет такого метода».
Два варианта для вас:
Вариант 1:
Используйте строки для имени вашего метода, например ::100100
function myconsole(method) {
var args;
if (devmode && window.console) {
args = Array.prototype.slice.apply(arguments, 1);
window.console[method].apply(window.console, args);
}
}
Использование:
myconsole("log", "message");
myconsole("error", "errormessage");
Мясо myconsole
здесь:
args = Array.prototype.slice.apply(arguments, 1);
window.console[method].apply(window.console, args);
В первой строке копируются все аргументы, предоставленные myconsole
, кроме первой (это имя метода, который мы хотим использовать). Вторая строка извлекает объект функции для свойства, названного строкой в method
из объекта console
, а затем вызывает его через функцию JavaScript apply
, передавая эти аргументы.
Вариант 2:
Мне пришла вторая альтернатива, которая лучше всего выражена непосредственно в коде:
var myconsole = (function() {
var methods = "log debug info warn error assert clear dir dirxml trace group groupCollapsed groupEnd time timeEnd profile profileEnd count exception table".split(' '),
index,
myconsole = {},
realconsole = window.console;
for (index = 0; index < methods.length; ++index) {
proxy(methods[index]);
}
function proxy(method) {
if (!devmode || !realconsole || typeof realconsole[method] !== 'function') {
myconsole[method] = noop;
}
else {
myconsole[method] = function() {
return realconsole[method].apply(realconsole, arguments);
};
}
}
function noop() {
}
return myconsole;
})();
Тогда вы просто звоните log
, warn
и т. Д. На myconsole
как обычно.