关于重写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. mimikaz常用命令

    常用命令,留着自己使用的时候方便查找 mimikatz是一款功能强大的轻量级调试神器,通过它你可以提升进程权限注入进程读取进程内存,当然他最大的亮点也是让阿刚最感兴趣的就是他可以直接从 lsass中获 ...

  2. Django中一个项目使用多个数据库

    在django项目中, 一个工程中存在多个APP应用很常见. 有时候希望不同的APP连接不同的数据库,这个时候需要建立多个数据库连接. 参考:http://blog.csdn.net/songfree ...

  3. 初学Vue 遇到Module not found:Error:Can`t resolve 'less-loader' 问题

    学习vue时,导入一个子组件时遇到Module not found:Error:Can`t resolve 'less-loader' 问题,实际上时在子组件中的样式里加了这么个代码 <styl ...

  4. html5中JavaScript删除全部节点

    如果div里有这么些内容: <!DOCTYPE html> <html> <head> <meta http-equiv="Content-Type ...

  5. windows程序设计 基础

    API全名(Application Program Interface) Windows窗口主函数 int WINAPI WinMain( HINSTANCE hInstance,//应用程序本次运行 ...

  6. [ Python ] KMP Algorithms

    def pmt(s): """ :param s: the string to get its partial match table :return: partial ...

  7. Python之socket_tcp

    1.1socket编程之tcp编程 """ socket类型 sock_stream 面向连接的流套接字,默认值 tcp协议 sock_dgram 无连接的数据报文套接字 ...

  8. spring-boot 根据环境启动

    spring-boot 根据环境启动: java -jar spring-boot--config--SNAPSHOT.jar --spring.profiles.active=prod

  9. springmvc sessionfilter 登录过滤器

    1.在web.xml中配置 <!-- sessionfilter --> <filter> <filter-name>sessionFilter</filte ...

  10. 复习-css元素定位

    css元素定位 <style type="text/css"> body{ margin: 15px; font-family: "Adobe 宋体 Std ...