Обертка на console.log
Нашел вот такой кусок кода.
var Logger = {}; Logger.log = function () { if (window.console && console.log) { try { console.log.apply(console, arguments) } catch (e) { console.log(Array.slice(arguments)) } } }; У меня возникли следующие вопросы: 1. Зачем проверять window.console, разве нельзя обойтись просто проверкой console.log? 2. console.log.apply(console, arguments) по сути ничего не меняет? Ведь this передается тот же console что и был. Тогда смысл в функции Logger.log, если она предположительно тоже самое делает что и console.log? Может я что-то не уловил? |
Цитата:
Цитата:
|
почему тогда нельзя написать вместо
console.log.apply(console, arguments) просто console.log(arguments) это что-то поменяет? |
Да. Function#apply
|
Цитата:
var result = function.apply(thisArg[, argsArray]); а если без нее то строка аргументов-то есть это неравнозначное написание общий смысл функции что она предотвращает некоторые ошибки по сравнению с написанием console.log |
если не трудно приведи, пожалуйста, несколько ошибок по твоему мнению которые будут предотвращаться, по сравнению с обычным console.log для полной картины понимания
|
German Malinovskiy, предлагаю рассмотреть функцию Math.max, возвращающую максимум из её аргументов. Тогда для поиска максимума массива
var a = [-1, 10, 11, 0, -5, -9]; alert(Math.max(a)); // NaN — непонятно, как выбирать максимальный массив alert(Math.max.apply(Math, a)); // ок — выбираем максимум из массиваВо втором случае запись эквивалентна Math.max(-1, 10, 11, 0, -5, -9). |
Насколько я разобрался это обертка, для того чтобы вызывать console.log c произвольным числом аргументов (console.log.apply(console, arguments), хотя вроде console.log он и так принимает несколько аргументов) и еще ловит какие-то исключения, которые бросает console.log (чтобы не прерывать выполнение скрипта?)
|
console.log - он разный бывает, и файербаговский и хромовский и самописный встречается...
А функция делает следующее: var Logger = {}; //создаётся объект Logger Logger.log = function () { //создаётся функция log if (window.console && console.log) { //проверяют наличие console вообще и console.log ы яастности.(если сразу проверять console.log при отсутствующем console - будет ошибка) try { console.log.apply(console, arguments) // пытаются передать все принятые функцией Logger.log аргументы по отдельности, как еслибы вызов шёл напрямую } catch (e) { //если действие законцилось ошибкой(console.log почеу-то не захотел принимать много аргументов) console.log(Array.slice(arguments)) //передаём в console.log массив состоящий из переданых аргументов } } }; |
Часовой пояс GMT +3, время: 17:40. |