Для ECMAScript 2015 и более поздних версий
Вы можете использовать более новую функцию Proxy из ECMAScript 2015 стандарта, чтобы "захватить" глобальный console.log.
Исходный код
'use strict';
class Mocker {
static mockConsoleLog() {
Mocker.oldGlobalConsole = window.console;
window.console = new Proxy(window.console, {
get(target, property) {
if (property === 'log') {
return function(...parameters) {
Mocker.consoleLogReturnValue = parameters.join(' ');
}
}
return target[property];
}
});
}
static unmockConsoleLog() {
window.console = Mocker.oldGlobalConsole;
}
}
Mocker.mockConsoleLog();
console.log('hello'); // nothing happens here
Mocker.unmockConsoleLog();
if (Mocker.consoleLogReturnValue === 'hello') {
console.log('Hello world!'); // Hello world!
alert(Mocker.consoleLogReturnValue);
// anything you want to do with the console log return value here...
}
Онлайн-демонстрация
Repl.it .
Пользователи Node.js...
... я вас не забываю.Вы можете взять этот исходный код и заменить window.console
на gloabl.console
, чтобы правильно ссылаться на объект консоли (и, конечно, избавиться от вызова alert
).На самом деле я изначально написал этот код и протестировал его на Node.js.