Chciałem, aby moje instrukcje rejestrowania były jak najkrótsze, jednocześnie uniemożliwiając dostęp do konsoli, gdy ta nie istnieje; I wymyślił następujące rozwiązanie:Przypisywanie pliku console.log do innego obiektu (wydanie Webkit)
var _ = {};
if (console) {
_.log = console.debug;
} else {
_.log = function() { }
}
Dla mnie to wydaje się dość elegancki i działa doskonale w Firefoksie 3.6 (w tym zachowania numery linii, które czynią console.debug
bardziej użyteczne niż console.log
). Ale nie działa w Safari 4. [Aktualizacja: lub w Chrome. Tak więc problem wydaje się być różnica między Firebug i konsoli Webkit] Jeśli zastosujemy się do powyższych z
console.debug('A')
_.log('B');
pierwsza wypowiedź działa dobrze w obu przeglądarkach, ale drugi generuje. „Błąd typu: typ błędu” w Safari. Czy to tylko różnica między tym, jak Firebug i Safari Web Developer Tools implementują konsolę? Jeśli tak, to jest BARDZO denerwujące na części
Apple's
Webkit's. Powiązanie funkcji konsoli z prototypem, a następnie tworzenie instancji zamiast wiązania jej bezpośrednio z obiektem, nie pomaga.
Mogę, oczywiście, zadzwonić pod numer console.debug
z anonimowej funkcji przypisanej do _.log
, ale wtedy stracę numery linii. Jakieś inne pomysły?
Jest to cecha WebKit, a nie bug ;-) https://bugs.webkit.org/show_bug.cgi?id=20141 –
Powiązane: http://stackoverflow.com/questions/14146316/why-does-scope-reduction-in-safari-break-existing-code – MvG