重写 console方法

图片描述

找到这个符合我的要求 但是没看懂到底是怎么做到的

ADD:

不好意思,刚发现我修改的方法也不能实现我要的效果
这里说一下我的需求
主要是为了实现
1.自定义的log()函数既能根据开关值(true false)判断是否输出错误信息
2.在调试窗口 自定义的log()函数能跟踪到执行时的文件目录

    如下图: 1,2的执行位置都在selectPoint.js内
    希望2的mylog()函数后面显示的文件名为 selectPoint.js  而不是 mylog()函数被定义的文件位置

clipboard.png

查了部分资料,是不是需要手动完成 堆栈追踪部分的操作 emmmm。。。。

阅读 9.8k
5 个回答

这个功能不全,如果传入mylog(1,2)结果就不同了,我写了个:

var show = true;
var log = function(){
    if(show){
        console.log.apply(null,arguments)
    }
}
log("You can see me.");

// 线下设置show=true,
// 线上改为show=false,即可

// console.log.apply(null,arguments) 
/* apply第一个参数为console.log函数运行时内部this指向, 这儿没多大影响, 随便设, 
   主要是第二个参数, 为传入console.log的参数, 也就是需要打印在控制台的字符
*/

ADD改为这个:

var show = true,
    log = (function(){
        return show ? console.log.bind() : new Function();
    })();

mxLibirary.debug开关,
比如 在开发环境下打开,使用 mylog就可以在控制台打印出东西。生产环境下关闭,就无法打印。

函数内部: oriLogFunc 指向 console.log 方法,使用call, 传入执行环境和 参数。调用 console.log 方法

改成console.trace就行

console.trace 这个输出的路径有点太复杂了 一打开几十行 0.0

const log = console.log 不就好了

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题