JS 中 console.log 的问题。 - V2EX
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
推荐关注
Meteor
JSLint - a Javascript code quality tool
jsFiddle
D3.js
WebStorm
推荐书目
Javascript 权威指南第 5 版
Closure: The Definitive Guide
haozhang
V2EX    Javascript

JS 中 console.log 的问题。

  •  
  •   haozhang 2015-05-05 21:27:42 +08:00 7262 次点击
    这是一个创建于 3887 天前的主题,其中的信息可能已经有所发展或是发生改变。

    今天突然想到用个变量去指向console.log于是:
    var log = console.log;
    log(1);

    但是出现了如下错误:
    Uncaught TypeError: Illegal invocation

    是浏览器的内置console.log不能手动的指向她?

    16 条回复    2015-05-06 23:23:21 +08:00
    soulteary
        1
    soulteary  
       2015-05-05 21:30:56 +08:00   1
    顺手答,不谢: https://github.com/soulteary/debug.js

    当然,你也可以简单的定义window.cOnsole= window.console || {log:function(){...}, ...}
    haozhang
        2
    haozhang  
    OP
       2015-05-05 21:33:26 +08:00
    @soulteary 可是这样子干的话。。console出来的line number是自定义的log函数的地方而不是使用log函数的地方。。。看起来有点累。
    tonyluj
        3
    tonyluj  
       2015-05-05 21:33:51 +08:00
    这样也好:
    var log = function(msg) { console.log(msg); }
    haozhang
        4
    haozhang  
    OP
       2015-05-05 21:34:42 +08:00
    @soulteary 而且window.cOnsole= window.console这是在干嘛...
    haozhang
        5
    haozhang  
    OP
       2015-05-05 21:35:56 +08:00
    @tonyluj 一开始我是这么干的...但是console出来的代码line number是定义这个log函数的line number而不是调用log函数的地方,看console信息非常难受,不能第一时间看到出错的地方
    ibigbug
        7
    ibigbug  
       2015-05-05 21:51:13 +08:00   4
    ```
    var log = console.log.bind(console)
    log(123)
    ```

    这样就好了呀
    haozhang
        8
    haozhang  
    OP
       2015-05-05 22:02:23 +08:00
    @ibigbug 正解啊,像我那样调用的话scope是window而不是console了。
    haozhang
        9
    haozhang  
    OP
       2015-05-05 22:17:41 +08:00
    @ibigbug 不是scope而是this...,多谢了。
    haozhang
        10
    haozhang  
    OP
       2015-05-05 22:22:49 +08:00
    @tonyluj XD,看7L的解决办法,一个字6。
    tonyluj
        11
    tonyluj  
       2015-05-05 22:25:28 +08:00
    @haozhang 我自己之前封装log的时候,还需要加一些其他业务逻辑,不方便之处就是行号显示不对。这样的话貌似只是改了个名字~
    magicdawn
        12
    magicdawn  
       2015-05-05 22:36:17 +08:00
    log = console.log

    然后调用不对,可能内部实现,是依赖this值的,log单独调用时this指向不对...

    在node上就没有这个问题,console.log.toString() 显示的是native code
    haozhang
        13
    haozhang  
    OP
       2015-05-05 22:37:48 +08:00
    @tonyluj 对啊,要用lineNumber的话必须是Error,但我只是想log一下而已..
    haozhang
        14
    haozhang  
    OP
       2015-05-05 22:38:39 +08:00
    @magicdawn 对的,内部的this本来是指向console的,我直接在全局调用的话,this就是window了,所以出错了。
    otakustay
        15
    otakustay  
       2015-05-06 11:30:31 +08:00
    同样的
    var g = document.getElementById;
    g('foo');
    也是不行的
    ibigbug
        16
    ibigbug  
       2015-05-06 23:23:21 +08:00
    @haozhang this 还是 console,因为 bind 了
    关于     帮助文档     自助推广系统     博客     API     FAQ     Solana     2775 人在线   最高记录 6679       Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 27ms UTC 14:40 PVG 22:40 LAX 06:40 JFK 09:40
    Do have faith in what you're doing.
    ubao msn snddm index pchome yahoo rakuten mypaper meadowduck bidyahoo youbao zxmzxm asda bnvcg cvbfg dfscv mmhjk xxddc yybgb zznbn ccubao uaitu acv GXCV ET GDG YH FG BCVB FJFH CBRE CBC GDG ET54 WRWR RWER WREW WRWER RWER SDG EW SF DSFSF fbbs ubao fhd dfg ewr dg df ewwr ewwr et ruyut utut dfg fgd gdfgt etg dfgt dfgd ert4 gd fgg wr 235 wer3 we vsdf sdf gdf ert xcv sdf rwer hfd dfg cvb rwf afb dfh jgh bmn lgh rty gfds cxv xcv xcs vdas fdf fgd cv sdf tert sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf shasha9178 shasha9178 shasha9178 shasha9178 shasha9178 liflif2 liflif2 liflif2 liflif2 liflif2 liblib3 liblib3 liblib3 liblib3 liblib3 zhazha444 zhazha444 zhazha444 zhazha444 zhazha444 dende5 dende denden denden2 denden21 fenfen9 fenf619 fen619 fenfe9 fe619 sdf sdf sdf sdf sdf zhazh90 zhazh0 zhaa50 zha90 zh590 zho zhoz zhozh zhozho zhozho2 lislis lls95 lili95 lils5 liss9 sdf0ty987 sdft876 sdft9876 sdf09876 sd0t9876 sdf0ty98 sdf0976 sdf0ty986 sdf0ty96 sdf0t76 sdf0876 df0ty98 sf0t876 sd0ty76 sdy76 sdf76 sdf0t76 sdf0ty9 sdf0ty98 sdf0ty987 sdf0ty98 sdf6676 sdf876 sd876 sd876 sdf6 sdf6 sdf9876 sdf0t sdf06 sdf0ty9776 sdf0ty9776 sdf0ty76 sdf8876 sdf0t sd6 sdf06 s688876 sd688 sdf86