重写console.log的一些理解
关于重写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的一些理解的更多相关文章
- 重写 console.log()
/*重写console.log*/ console.log = (function(mFun){ return function(str){ mFun.call(console,'hello! ' + ...
- console.log 用法
转自http://www.cnblogs.com/ctriphire/p/4116207.html 大家都有用过各种类型的浏览器,每种浏览器都有自己的特色,本人拙见,在我用过的浏览器当中,我是最喜欢C ...
- 【转】console.log 用法
标签: 转自http://www.cnblogs.com/ctriphire/p/4116207.html 大家都有用过各种类型的浏览器,每种浏览器都有自己的特色,本人拙见,在我用过的浏览器当中,我是 ...
- 小程序重新封装打印函数console.log
习惯性使用console.log打印获取到的数据,信息等,然后上星期大佬看见了说怎么那么多打印信息出来,线上那个也是吗?问我能不能线上的就不打印出来? 我就说那就封装一个打印函数呗. 重写一个没问题, ...
- Vue根据URL传参来控制全局 console.log 的开关
如果你的项目中console.log了很多信息,但是发到生产环境上又不想打印这些信息,这时候就需要设置一个全局变量,如:debug, 用正则匹配一下参数: const getQueryStr = (n ...
- 快速删除项目中的输出日志console.log
项目开发时,控制台往往有许多忘记删除或注释掉的输出日志.但是上线后总不能一个一个删吧,最近总结出几个解决思路 重写console.log方法,使其失去 输出能力 这个最直接有效,用vue框架的话放在m ...
- console.log 被重写覆盖以后如何恢复
有时候一些项目中会使用类似如下的方式覆盖掉console对象: var console = {}; console.log = function(){}; console.info = functio ...
- 从window.console&&console.log(123)浅谈JS的且运算逻辑(&&)
一.JS的且运算记得最开始看到window.console&&console.log(123),当时知道能起什么作用但是没有深入研究,最近在研究后总算弄明白了.要理解这个,首先得明白三 ...
- 前端不为人知的一面--前端冷知识集锦 前端已经被玩儿坏了!像console.log()可以向控制台输出图片
前端已经被玩儿坏了!像console.log()可以向控制台输出图片等炫酷的玩意已经不是什么新闻了,像用||操作符给变量赋默认值也是人尽皆知的旧闻了,今天看到Quora上一个帖子,瞬间又GET了好多前 ...
随机推荐
- C和C指针小记(十七)-使用结构和指针-链表
1.链表 链表(linked list)即使是一些包含数据的独立数据结构的(Node)集合. 链表中的每个节点通过链或指针链接在一起. 程序通过指针访问链表中的节点. 节点通常是动态分配的,但也有由节 ...
- hive sqoop,sqoop-hive import data
https://segmentfault.com/a/1190000002532293 https://www.zybuluo.com/aitanjupt/note/209968 create tab ...
- ext 的loadmask 与ajax的同步请求水火不容
由于ajax 的同步请求会有一段请求时间.有的短.有的长,对于短的我们还是能接受的,不过长的话就必须处理一下了, 就比如处于ext 4.2.0的框架下,需要一个遮掩的样式,框架是有自带的,loadma ...
- NOIP2018提高组初赛知识点
(传说,在神秘的初赛中,选手们经常互相爆零以示友好……) 历年真题:ti.luogu.com.cn 以下标题中打*的是我认为的重点内容 一.关于计算机 (一)计算机组成 硬件组成: 1. 控制器(C ...
- Java-idea-常用插件
一.插件安装 settings→plugins→直接搜索框搜索,没有选择Browse Respositories→找到需要安装的插件,install即可 二.常用插件 插件名称 简介 地址 备注 ...
- python基础(15)-socket网络编程&socketserver
socket 参数及方法说明 初始化参数 sk = socket.socket(参数1,参数2,参数3) 参数1:地址簇 socket.AF_INET IPv4(默认) socket.AF_INET6 ...
- python进阶之 进程编程
1.进程 顾名思义,进程即正在执行的一个过程.进程是对正在运行程序的一个抽象. 进程的概念起源于操作系统,是操作系统最核心的概念,也是操作系统提供的最古老也是最重要的抽象概念之一.操作系统的其他所有内 ...
- java求最大公约数,和最小公倍数
import java.util.Scanner; public class Test { public static void main(String[] args) { Scanner sc = ...
- JSP 修改不能编辑
JSP做修改功能时候,有的时候,某些值要设置成只读状态,不能修改,刚开始做的时候,出现了修改之后值传不到后台的情况,由于刚出来工作不久,不是很了解这个.思索了半天,才发现是由于这个属性的缘故.浪费了大 ...
- 怎样下载youtube的字幕
第一步:安装chrome浏览器 第二步:安装Tampermonkey扩展. google.com的页面 第三步:使用下面两个链接安装(点进去后点击安装此脚本即可)脚本1,脚本2