Не работает 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()); Для проверки запускал из консоли и из букмарклета. Что я упустил? |
Ну наверное log из this пытается что-то взять, а ты подменяешь его.
Попробуй так: var log = console.log.bind(console); |
Надо так:
function log(){console.log.apply(console,arguments)} |
Да, с this=console заработало :)
Только может объясните - почему раньше console.log.apply(this,arguments) работале, а теперь - нет? (Это началось кажется с Firefox30) Просто чтобы знать - что изменилось, т.к. думаю, что это не последний случай, где с этим столкнусь? |
Потому что this рандомный у тебя. В strict он бы тебя ещё и обругал за это. А так this == window.
Почему работало? Ну наверное просто не было проверки, и log не пытался ни к чему обращаться через this. Чтоб "не сталкиваться" больше - почитай что такое this. |
Тогда вопрос такой: почему в новых Firefox console.log.apply стал требовать только this=console,
и больше не хочет принимать этим аргументом window, как раньше? Вообще ведь смысл функции apply - именно в том, чтобы передать через него свой this |
var console = { log: function(arg) { this._realLog(arg); }, _realLog: function(arg) { alert(arg); } }; console.log('Так работает'); console.log.apply(this, ['А так нет']); Теперь дошло? |
https://developer.mozilla.org/en-US/...eb/API/Console
Вот если твой this реализует все эти методы, то скорее всего это сработает. |
Ну а в связи с чем изменения-то?
Всю жизнь console.log.apply( window, arguments) работало без проблем. |
Почемучкин, а почему window? В чём смысл? Я понимаю ещё вот так:
console.log.apply(null, arguments); Ведь когда ты передаёшь контекст, это же зачем-то нужно. Хотя если жить по принципу "работает же, чё", то, конечно, без разницы:) |
Часовой пояс GMT +3, время: 12:39. |