关于重写console.log的方式通常都是这样的:

  

console.log = (function(oriLogFunc){
return function(str)
{
oriLogFunc.call(console,"hello:"+str);
}
})(console.log);
console.log("dami");

 在这里,通过立即执行函数传入console.log参数,然后返回一个方法,而在返回的方法里面保持了对console.log的引用,这其实是一个闭包,所以我们重写了console.log却仍然可以使用console.log方法的原因:console.log指向一个方法,这个方法实现了输出功能,console.log只是指向那里,然后当作参数传入立即执行函数后,在立即执行函数里面我们实际上拿到的也是这个指向输出方法的地址,而console.log不过是个表皮,所以最重要的是拿到对输出方法的引用,并并保持这个引用,所以如果是这样,不使用闭包也是可以的

var log = console.log;
console.log = function(text){
log("info"+text);
//log.call(console,"info"+text);//使用call让log里面的this指向console,而不是window
}
console.log("dami")

在这里我们把console.log赋值给log 这样log就拿到了对输出方法的引用,所以下面重写console.log的时候我们可以使用log来输出,这里有个注意点,在注释部分,我们应该使用log.call(console,"")而不是直接使用log来输出,这牵涉到log方法里this指向的问题,如果直接使用log()那this指向window,这显然不是我们希望的,我们希望他向console.log方法一样指向console,所以这里要使用log.call(console,"")

重写console.log的一些理解的更多相关文章

  1. 重写 console.log()

    /*重写console.log*/ console.log = (function(mFun){ return function(str){ mFun.call(console,'hello! ' + ...

  2. console.log 用法

    转自http://www.cnblogs.com/ctriphire/p/4116207.html 大家都有用过各种类型的浏览器,每种浏览器都有自己的特色,本人拙见,在我用过的浏览器当中,我是最喜欢C ...

  3. 【转】console.log 用法

    标签: 转自http://www.cnblogs.com/ctriphire/p/4116207.html 大家都有用过各种类型的浏览器,每种浏览器都有自己的特色,本人拙见,在我用过的浏览器当中,我是 ...

  4. 小程序重新封装打印函数console.log

    习惯性使用console.log打印获取到的数据,信息等,然后上星期大佬看见了说怎么那么多打印信息出来,线上那个也是吗?问我能不能线上的就不打印出来? 我就说那就封装一个打印函数呗. 重写一个没问题, ...

  5. Vue根据URL传参来控制全局 console.log 的开关

    如果你的项目中console.log了很多信息,但是发到生产环境上又不想打印这些信息,这时候就需要设置一个全局变量,如:debug, 用正则匹配一下参数: const getQueryStr = (n ...

  6. 快速删除项目中的输出日志console.log

    项目开发时,控制台往往有许多忘记删除或注释掉的输出日志.但是上线后总不能一个一个删吧,最近总结出几个解决思路 重写console.log方法,使其失去 输出能力 这个最直接有效,用vue框架的话放在m ...

  7. console.log 被重写覆盖以后如何恢复

    有时候一些项目中会使用类似如下的方式覆盖掉console对象: var console = {}; console.log = function(){}; console.info = functio ...

  8. 从window.console&&console.log(123)浅谈JS的且运算逻辑(&&)

    一.JS的且运算记得最开始看到window.console&&console.log(123),当时知道能起什么作用但是没有深入研究,最近在研究后总算弄明白了.要理解这个,首先得明白三 ...

  9. 前端不为人知的一面--前端冷知识集锦 前端已经被玩儿坏了!像console.log()可以向控制台输出图片

    前端已经被玩儿坏了!像console.log()可以向控制台输出图片等炫酷的玩意已经不是什么新闻了,像用||操作符给变量赋默认值也是人尽皆知的旧闻了,今天看到Quora上一个帖子,瞬间又GET了好多前 ...

随机推荐

  1. 《Mysql 用户管理》

    一:数据库用户 ROOT 和 其他用户有什么区别么? -  Mysql root 和 linux root 不是一回事,数据库 root 只不过是初始化时候自己建立的一个用户而已,随时可以删除/修改. ...

  2. 执行git add .命令时报warning: LF will be replaced by CRLF in yarn.lock.

    解决办法是执行:git config --global core.autocrlf false 是符号 / 转义的问题

  3. 利用django-crontab设定定时任务

    Django中想要设定定时任务的方法有很多,如celery.apscheduler.crontab等等,本文用crontab来实现. 想用apscheduler实现请看本人另一篇博客:使用APSche ...

  4. Python时间、日期、时间戳之间的转换

    一.字符串与为时间字符串之间的互相转换 方法:time模块下的strptime方法 a = "2012-11-11 23:40:00" # 字符串转换为时间字符串 import t ...

  5. [面试题]vi/vim快捷键及面试题系列

    选择 vi保存退出命令 w! wq! q! www vi移动光标到文件最后一行 G g ggg 4444 vi删除一行的命令 dd d D shift+4 在vi编辑器中的命令模式下,键入()可在光标 ...

  6. 流控制、FlowControl

    这个选项基本上所有网卡都会有,但是叫法会有些差别,比如Realtek网卡叫做流控制,Intel网卡叫做流程控制,还有一些网卡选项干脆是英文的,叫做FlowControl,很多交换机上也有这个功能,也叫 ...

  7. 1: unit test

    1: se01  进入到TR包里面,创建自己的包.(开发过程中,每个人创建一个包,最后每个包合成一个team的TR包.整个产品将所有的TR包合成,发布. 2:向cds view里面插入假数据 3:使用 ...

  8. Android签名文件转化为pk8和pem来对apk重签名

    当我们需要修改已经打包好的apk中的某个文件时,比如改下图标,我们势必要采用反编译apk,改文件,重编译apk,重签名才行,参考:https://www.cnblogs.com/zndxall/p/9 ...

  9. Ngnix 配置文件

    配置文件路径/usr/local/nginx/conf/nginx.conf user www www; #nginx 服务的伪用户和用户组 worker_processes auto; #启动进程, ...

  10. easy ui datatimebox databox 当前时间

    databox  当前日期: class="easyui-datebox" var curr_time = new Date(); var strDate = curr_time. ...