Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #1 (permalink)  
Старый 12.08.2012, 14:24
Новичок на форуме
Отправить личное сообщение для German Malinovskiy Посмотреть профиль Найти все сообщения от German Malinovskiy
 
Регистрация: 12.08.2012
Сообщений: 4

Обертка на 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? Может я что-то не уловил?
Ответить с цитированием
  #2 (permalink)  
Старый 12.08.2012, 14:33
Аватар для vadim5june
Студент
Отправить личное сообщение для vadim5june Посмотреть профиль Найти все сообщения от vadim5june
 
Регистрация: 30.04.2012
Сообщений: 1,113

Сообщение от German Malinovskiy
Зачем проверять window.console, разве нельзя обойтись просто проверкой console.log?
если Вы эту проверку не сделаете а console не определена то программа остановится в этом месте

Сообщение от German Malinovskiy
предположительно тоже самое делает что и console.log
она здесь какую то ошибку выведет в случае неудачи-я думаю в этом разница

Последний раз редактировалось vadim5june, 12.08.2012 в 14:37.
Ответить с цитированием
  #3 (permalink)  
Старый 12.08.2012, 14:41
Новичок на форуме
Отправить личное сообщение для German Malinovskiy Посмотреть профиль Найти все сообщения от German Malinovskiy
 
Регистрация: 12.08.2012
Сообщений: 4

почему тогда нельзя написать вместо
console.log.apply(console, arguments)

просто
console.log(arguments)

это что-то поменяет?
Ответить с цитированием
  #4 (permalink)  
Старый 12.08.2012, 15:07
Аватар для B@rmaley.e><e
⊞ Развернуть
Отправить личное сообщение для B@rmaley.e><e Посмотреть профиль Найти все сообщения от B@rmaley.e><e
 
Регистрация: 11.01.2010
Сообщений: 1,810

Да. Function#apply
Ответить с цитированием
  #5 (permalink)  
Старый 12.08.2012, 15:08
Аватар для vadim5june
Студент
Отправить личное сообщение для vadim5june Посмотреть профиль Найти все сообщения от vadim5june
 
Регистрация: 30.04.2012
Сообщений: 1,113

Сообщение от German Malinovskiy Посмотреть сообщение
почему тогда нельзя написать вместо
console.log.apply(console, arguments)

просто
console.log(arguments)

это что-то поменяет?
если apply то аргументы у нас как массив передаются
var result = function.apply(thisArg[, argsArray]);
а если без нее то строка аргументов-то есть это неравнозначное написание
общий смысл функции что она предотвращает некоторые ошибки по сравнению с написанием console.log

Последний раз редактировалось vadim5june, 12.08.2012 в 15:10.
Ответить с цитированием
  #6 (permalink)  
Старый 12.08.2012, 15:24
Новичок на форуме
Отправить личное сообщение для German Malinovskiy Посмотреть профиль Найти все сообщения от German Malinovskiy
 
Регистрация: 12.08.2012
Сообщений: 4

если не трудно приведи, пожалуйста, несколько ошибок по твоему мнению которые будут предотвращаться, по сравнению с обычным console.log для полной картины понимания
Ответить с цитированием
  #7 (permalink)  
Старый 12.08.2012, 16:00
Аватар для B@rmaley.e><e
⊞ Развернуть
Отправить личное сообщение для B@rmaley.e><e Посмотреть профиль Найти все сообщения от B@rmaley.e><e
 
Регистрация: 11.01.2010
Сообщений: 1,810

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).
Ответить с цитированием
  #8 (permalink)  
Старый 14.08.2012, 16:56
Новичок на форуме
Отправить личное сообщение для German Malinovskiy Посмотреть профиль Найти все сообщения от German Malinovskiy
 
Регистрация: 12.08.2012
Сообщений: 4

Насколько я разобрался это обертка, для того чтобы вызывать console.log c произвольным числом аргументов (console.log.apply(console, arguments), хотя вроде console.log он и так принимает несколько аргументов) и еще ловит какие-то исключения, которые бросает console.log (чтобы не прерывать выполнение скрипта?)

Последний раз редактировалось German Malinovskiy, 14.08.2012 в 17:02.
Ответить с цитированием
  #9 (permalink)  
Старый 14.08.2012, 17:58
Аватар для Aetae
Тлен
Отправить личное сообщение для Aetae Посмотреть профиль Найти все сообщения от Aetae
 
Регистрация: 02.01.2010
Сообщений: 6,480

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 массив состоящий из переданых аргументов
        }
    }
};
__________________
29375, 35
Ответить с цитированием
Ответ



Опции темы Искать в теме
Искать в теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Не срабатывает обертка фун-и в IE8 zilker Internet Explorer 6 16.07.2012 18:54
jquery обертка у функции Policeman jQuery 2 26.03.2012 23:49
Проблемы с console.log FINoM Оффтопик 13 24.02.2012 05:06
Лишняя обертка Мараторий Библиотеки/Тулкиты/Фреймворки 11 26.01.2010 18:08