Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #1 (permalink)  
Старый 23.10.2014, 18:30
Профессор
Отправить личное сообщение для Почемучкин Посмотреть профиль Найти все сообщения от Почемучкин
 
Регистрация: 11.05.2011
Сообщений: 241

Не работает console.log.apply(this,arguments) - Почему?
Для отладки использую такую функцию (упрощенно):
function log(){console.log.apply(this,arguments)}

Но в новых версиях Firefox это почему-то уже не работает, выдается ошибка:
TypeError: 'log' called on an object that does not implement interface Console.


Это работает:
console.log(new Date());

И это работает:
function log(){console.log(arguments)} 

log(new Date());


Это - теперь не работает:
function log1(){console.log.apply(this,arguments)} 

log1(new Date());

Пробовал и так, тоже не работает:
function log1(){window.console.log.apply(arguments.callee,arguments)} 

log1(new Date());


Для проверки запускал из консоли и из букмарклета.

Что я упустил?
Ответить с цитированием
  #2 (permalink)  
Старый 23.10.2014, 18:36
Отправить личное сообщение для Octane Посмотреть профиль Найти все сообщения от Octane  
Регистрация: 10.07.2008
Сообщений: 3,873

Ну наверное log из this пытается что-то взять, а ты подменяешь его.
Попробуй так:
var log = console.log.bind(console);
Ответить с цитированием
  #3 (permalink)  
Старый 23.10.2014, 18:41
Профессор
Отправить личное сообщение для Sweet Посмотреть профиль Найти все сообщения от Sweet
 
Регистрация: 16.03.2010
Сообщений: 1,618

Надо так:
function log(){console.log.apply(console,arguments)}
Ответить с цитированием
  #4 (permalink)  
Старый 23.10.2014, 18:54
Профессор
Отправить личное сообщение для Почемучкин Посмотреть профиль Найти все сообщения от Почемучкин
 
Регистрация: 11.05.2011
Сообщений: 241

Да, с this=console заработало

Только может объясните - почему раньше console.log.apply(this,arguments) работале, а теперь - нет? (Это началось кажется с Firefox30)

Просто чтобы знать - что изменилось, т.к. думаю, что это не последний случай, где с этим столкнусь?
Ответить с цитированием
  #5 (permalink)  
Старый 23.10.2014, 21:31
Аватар для Aetae
Тлен
Отправить личное сообщение для Aetae Посмотреть профиль Найти все сообщения от Aetae
 
Регистрация: 02.01.2010
Сообщений: 6,587

Потому что this рандомный у тебя. В strict он бы тебя ещё и обругал за это. А так this == window.
Почему работало? Ну наверное просто не было проверки, и log не пытался ни к чему обращаться через this.

Чтоб "не сталкиваться" больше - почитай что такое this.
__________________
29375, 35
Ответить с цитированием
  #6 (permalink)  
Старый 23.10.2014, 22:50
Профессор
Отправить личное сообщение для Почемучкин Посмотреть профиль Найти все сообщения от Почемучкин
 
Регистрация: 11.05.2011
Сообщений: 241

Тогда вопрос такой: почему в новых Firefox console.log.apply стал требовать только this=console,
и больше не хочет принимать этим аргументом window, как раньше?

Вообще ведь смысл функции apply - именно в том, чтобы передать через него свой this
Ответить с цитированием
  #7 (permalink)  
Старый 23.10.2014, 22:57
Аватар для danik.js
Профессор
Отправить личное сообщение для danik.js Посмотреть профиль Найти все сообщения от danik.js
 
Регистрация: 11.09.2010
Сообщений: 8,804

var console = {
     log: function(arg) {
         this._realLog(arg);
     },
     _realLog: function(arg) {
        alert(arg);
    }
};

console.log('Так работает');

console.log.apply(this, ['А так нет']);

Теперь дошло?
__________________
В личку только с интересными предложениями
Ответить с цитированием
  #8 (permalink)  
Старый 23.10.2014, 23:00
Аватар для danik.js
Профессор
Отправить личное сообщение для danik.js Посмотреть профиль Найти все сообщения от danik.js
 
Регистрация: 11.09.2010
Сообщений: 8,804

https://developer.mozilla.org/en-US/...eb/API/Console

Вот если твой this реализует все эти методы, то скорее всего это сработает.
__________________
В личку только с интересными предложениями
Ответить с цитированием
  #9 (permalink)  
Старый 31.10.2014, 17:01
Профессор
Отправить личное сообщение для Почемучкин Посмотреть профиль Найти все сообщения от Почемучкин
 
Регистрация: 11.05.2011
Сообщений: 241

Ну а в связи с чем изменения-то?
Всю жизнь console.log.apply( window, arguments) работало без проблем.
Ответить с цитированием
  #10 (permalink)  
Старый 31.10.2014, 17:17
Профессор
Отправить личное сообщение для Sweet Посмотреть профиль Найти все сообщения от Sweet
 
Регистрация: 16.03.2010
Сообщений: 1,618

Почемучкин, а почему window? В чём смысл? Я понимаю ещё вот так:
console.log.apply(null, arguments);

Ведь когда ты передаёшь контекст, это же зачем-то нужно. Хотя если жить по принципу "работает же, чё", то, конечно, без разницы
Ответить с цитированием
Ответ



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

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


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
cookie почему не работает скрипт Alven Общие вопросы Javascript 1 01.09.2013 03:17
В Mozilla работает а в Opera нет почему? alex2012 Общие вопросы Javascript 2 03.08.2013 22:43
Почему это работает? (инклуд JS в JS) Василий Б. Общие вопросы Javascript 4 11.06.2010 12:41
Помогите с javascript (Почему не работает) remus Оффтопик 9 09.06.2010 11:18
Почему не работает функция? Vitaly jQuery 10 31.07.2009 17:01