今天突然想到用个变量去指向console.log于是:
var log = console.log;
log(1);
但是出现了如下错误:
Uncaught TypeError: Illegal invocation
是浏览器的内置console.log不能手动的指向她?
1
soulteary 2015-05-05 21:30:56 +08:00 1
顺手答,不谢: https://github.com/soulteary/debug.js
当然,你也可以简单的定义window.console = window.console || {log:function(){...}, ...} |
2
haozhang OP @soulteary 可是这样子干的话。。console出来的line number是自定义的log函数的地方而不是使用log函数的地方。。。看起来有点累。
|
3
tonyluj 2015-05-05 21:33:51 +08:00
这样也好:
var log = function(msg) { console.log(msg); } |
5
haozhang OP @tonyluj 一开始我是这么干的...但是console出来的代码line number是定义这个log函数的line number而不是调用log函数的地方,看console信息非常难受,不能第一时间看到出错的地方
|
6
tonyluj 2015-05-05 21:39:27 +08:00 1
|
7
ibigbug 2015-05-05 21:51:13 +08:00 4
```
var log = console.log.bind(console) log(123) ``` 这样就好了呀 |
11
tonyluj 2015-05-05 22:25:28 +08:00
@haozhang 我自己之前封装log的时候,还需要加一些其他业务逻辑,不方便之处就是行号显示不对。这样的话貌似只是改了个名字~
|
12
magicdawn 2015-05-05 22:36:17 +08:00
log = console.log
然后调用不对,可能内部实现,是依赖this值的,log单独调用时this指向不对... 在node上就没有这个问题,console.log.toString() 显示的是native code |
14
haozhang OP @magicdawn 对的,内部的this本来是指向console的,我直接在全局调用的话,this就是window了,所以出错了。
|
15
otakustay 2015-05-06 11:30:31 +08:00
同样的
var g = document.getElementById; g('foo'); 也是不行的 |