Присвоение console.log к другому объекту (проблема WebKit)

Я хотел сохранить свои операторы входа максимально короткими, препятствуя тому, чтобы консоль была получена доступ, когда она не существует; я предложил следующее решение:

var _ = {};
if (console) {
    _.log = console.debug;
} else {
    _.log = function() { }
}

Мне это кажется довольно изящным, и это работает отлично в Firefox 3.6 (включая сохранение номеров строки, которые делают console.debug более полезный, чем console.log). Но это не работает в Safari 4. [Обновление: Или в Chrome. Таким образом, проблема, кажется, различие между Firebug и консолью Webkit.], Если я следую за вышеупомянутым с

console.debug('A')
_.log('B');

первый оператор хорошо работает в обоих браузерах, но второе генерирует "TypeError: Введите Ошибку" в Safari. Это - просто различие между тем, как Firebug и Инструменты Веб-разработчика Safari реализуют консоль? Если так, это является ОЧЕНЬ раздражающим на части WebKit Apple. Привязка консольной функции к прототипу и затем инстанцированию, вместо того, чтобы связать его непосредственно с объектом, не помогает.

Я мог, конечно, просто звонить console.debug из анонимной функции, присвоенной _.log, но затем я потерял бы свои номера строки. Какие-либо другие идеи?

7
задан Trevor Burnham 13 April 2010 в 00:41
поделиться

1 ответ

Во-первых, если консоль действительно не определена (как в браузеры, такие как IE), вы получите сообщение об ошибке. Вместо этого вы должны проверить это как свойство глобального объекта, которым в браузерах является окно . В целом также неплохо протестировать функцию перед ее использованием, поэтому я добавил тест для метода debug .

Возможно, реализация console.debug в Safari зависит от его значения , причем является ссылкой на console , чего не будет, если вы вызовите его, используя _. log ( this вместо этого будет ссылкой на _ ). Выполнив быстрый тест, похоже, что это действительно так, и следующее устраняет проблему:

var _ = {};
if (typeof window.console != "undefined"
       && typeof window.console.debug == "function") {
    _.log = function() {
        window.console.debug.apply(window.console, arguments);
    }
} else {
    _.log = function() { }
}
8
ответ дан 7 December 2019 в 05:20
поделиться
Другие вопросы по тегам:

Похожие вопросы: