我注意到一种奇怪的行为,即我的console.log
陈述没有做任何事情。我终于将其跟踪到外部脚本:
<!-- Load the systems bio heatmap package -->
<script type="text/javascript" src="http://systemsbiology-visualizations.googlecode.com/svn/trunk/src/main/js/load.js"></script>
<script type="text/javascript">
// uncommenting the following line ruins console.log
// systemsbiology.load("visualization", "1.0", {packages:["bioheatmap"]});
</script>
不幸的是,此脚本用于运行谷歌图表(AFAIK)的唯一热图包。
有没有办法以某种方式备份console.log
然后在执行代码后恢复它?我尝试做一个浅备份但没有运气:
<!-- Load the systems bio heatmap package -->
<script type="text/javascript" src="http://systemsbiology-visualizations.googlecode.com/svn/trunk/src/main/js/load.js"></script>
<script type="text/javascript">
var temp = console.log;
// the following line ruins console.log
systemsbiology.load("visualization", "1.0", {packages:["bioheatmap"]});
console.log = temp;
console.log('test'); // does not work
</script>
现在我问的是一个知道自己在做什么的人。
提前感谢您的帮助。
答案 0 :(得分:4)
您的代码可以正常工作,但前提是保留console
对象,并替换其中的方法。
var temp = console.log;
// the following line ruins console.log
console.log = function() {};
// put console.log back
console.log = temp;
console.log('test');
如果替换了console
对象,我怀疑是这种情况,这将无效。那么为什么不保存/恢复整个控制台对象呢?
var temp = console;
// the following line ruins console.log
window.console = {};
// Put the whole console object back
window.console = temp;
console.log('test');
但正如@gpojd所说,这是你正在使用的库中的一个主要错误。他们应该真的解决这个问题......
答案 1 :(得分:0)
<!-- backup console log method -->
<script> var temp = console.log.bind(console); </script>
<!-- Load the systems bio heatmap package -->
<script src="http://systemsbiology-visualizations.googlecode.com/svn/trunk/src/main/js/load.js"></script>
<!-- restore console log method -->
<script>
console.log = temp;
console.log('test'); // does work
</script>
编辑:您可以使用bind修复OP中的代码:
var temp = console.log.bind(console);
由于log()方法被硬编码为在内部使用“this”,因此我们需要在记忆方法时将“this”与我们一起使用。