Chrome没有'当console.log's称为log
Chrome doesn't recognize console.log when it's called log
和所有程序员一样,我很懒。所以在我的utils.js
中有一条简单的线:
window.log = console.log
这在firefox中运行良好,但它让Chrome像个小男孩一样哭泣。我必须写console.log
才能使它工作。
有什么建议吗?
Chrome的console.log
显然关注this
是什么,所以如果你这样做:
window.log = console.log
log('pancakes')
然后,您的工作只会得到一个"TypeError:非法调用"异常。然而,如果你这样强迫适当的上下文:
log.apply(console, 'pancakes')
那么您将在控制台中获得pancakes
。这就是为什么如果你想懒惰,只说log
,就需要将console.log
封装在函数中:一些console.log
实现需要使用适当的上下文进行调用。
然而,仅仅window.log = (x) -> console.log(x)
并不完全正确,因为console.log
是一个变差函数。更好的实现方式是:
window.log = -> console.log.apply(console, arguments)
或者说迂腐,因为arguments
不是数组,而Function#apply
期望一个数组,所以用通常的方式将arguments
"投射"到一个实数组:
window.log = -> console.log.apply(console, Array::slice.call(arguments))
这在任何地方都应该是一样的,并保持console.log
的变异性。不过,我怀疑你是否需要那么迂腐,只需发送arguments
并假装它是一个数组就可以了。您也可以使用CoffeeScript splats作为[].slice
和arguments
内容的缩写:
window.log = (args...) -> console.log(args...)
如果你看一下它的JavaScript版本,你会发现它是伪装的slice
和arguments
。
当然,如果你使用的是纯JavaScript,那么其中一个会起作用:
window.log = function() { console.log.apply(console, arguments) };
window.log = function() { console.log.apply(console, Array.prototype.slice.call(arguments)) };
另一种选择是使用Function#bind
强制在console
:的上下文中调用log
window.log = console.log.bind(console)
缺点是并非每个浏览器都支持bind
。
您必须将window.log定义为包含console.log 的函数
window.log = function(x) { console.log(x); }
- Array.length似乎不起作用;console.log则显示其他情况
- 有没有一种方法可以在控制台关闭的情况下让console.log()在IE中记录消息
- 将输入名称为“”的所有值相加;TotalInline[]”;
- console.log以外的Javascript输出函数
- 如果在代码末尾进行求值,jQuery-console.log将提供空数组
- 为什么生成器中的console.log会按这样的顺序出现
- async问题,JS Promise无法返回结果,但可以使用console.log
- 谷歌地图:函数返回未定义的值在console.log中运行良好
- 我应该返回一个类似console.log()的方法调用吗
- 指令从来没有被称为angularjs
- console.log无法运行Mac OS X
- 如何使console.log可配置
- 如何使用.log数据文件显示EXT-js网格
- 如何使用console.log语句在Mocha中测试函数
- JS数组称为“;name”;行为怪异
- 为什么我可以't直接将console.log()设置为回调函数
- Node.js/Express未输出console.log,highcharts.js给出未定义的错误
- 控制台.log触发,但随后的 Jquery 调用不执行任何操作
- Chrome没有'当console.log's称为log
- 为什么 JavaScript LN 被称为 Log