我正在尝试覆盖该console
对象 - 似乎运行良好。要使用,请将下面的代码保存在一个文件中,然后导入以覆盖代理对象,然后正常使用。
(请注意,这需要 babel 转译,并且在不支持 JavaScriptProxy
构造函数的环境(例如 IE 11)中不起作用)。
import console from './console-shadow.js'
console.log(...)
console.warn(...)
console.error(...)
// console-shadow.js
// Only these functions are shadowed by default
const overwrites = ['log', 'warn', 'info', 'error']
export default new Proxy(
// Proxy (overwrite console methods here)
{},
// Handler
{
get: (obj, prop) =>
prop in obj
? obj[prop]
: overwrites.includes(prop)
? (...args) => console[prop].call(console, new Date(), ...args)
: console[prop],
}
)
基本上我用 JavaScript 代理对象覆盖了控制台对象。当您调用.log
,.warn
等时,被覆盖的控制台将检查您所调用的是否是一个函数,如果是,它会将一个日期作为第一个参数注入到日志语句中,然后是所有参数。
我认为这个console
对象实际上做了很多,我并不完全理解它。所以我只拦截console.log
, console.info
, console.warn
,console.error
电话。