Javascript 为什么原型功能不影响console.log?
我原型化了Javascript 为什么原型功能不影响console.log?,javascript,console,prototyping,Javascript,Console,Prototyping,我原型化了函数,因此它有一个getBody函数: Function.prototype.getBody = function() { // Get content between first { and last } var m = this.toString().match(/\{([\s\S]*)\}/m)[1]; // Strip comments return m.replace(/^\s*\/\/.*$/mg,''); }; 有关更多信息,请参阅。 我
函数
,因此它有一个getBody函数:
Function.prototype.getBody = function() {
// Get content between first { and last }
var m = this.toString().match(/\{([\s\S]*)\}/m)[1];
// Strip comments
return m.replace(/^\s*\/\/.*$/mg,'');
};
有关更多信息,请参阅。
我试着这样测试:
console.log(console.log.getBody.getBody());
但收到错误:TypeError:console.log.getBody未定义
。
我发现这可能是因为console.log
是在我实际原型化Function
之前定义的,所以我在原型化之前创建了一个空函数x
,并尝试调用
console.log(x.getBody.getBody());
没有问题。检查console.log
的类型与typeof console.log
结果为“函数”。这里有一个方法可以尝试一下。所有这一切其实并不令人惊讶,因为除了console.log.getBody
未定义之外,这正是我所期望的
那么,为什么原型化
功能不影响控制台.log
?我将Firefox 18.0.1与Firebug 1.11.1一起使用。这似乎是Firebug的问题,而不是Firefox本身的问题。我的猜测是Firebug中的Function
与页面中的Function
处于不同的范围。(与其他浏览器不同,Firebug是一个扩展,而不是内置的浏览器工具)
事实上,如果您使用内置的Firefox控制台()而不是Firebug,那么您的代码工作得非常好
关于Firebug内部的更多信息可以在这里找到
这段摘录可能很有趣
当Firebug与Firefox分离时,以新的或单独的方式打开
窗口,新窗口有自己的作用域。在这个范围内,一些萤火虫
脚本标记编译以创建回原始的连接
browser.xul窗口。最重要的是,chrome.js对于每个top来说都是独一无二的
级别窗口,但分离窗口使用的Firebug对象是
父browser.xul的对象
适用于我(IE10)这在Chrome 24中适用于我。谢谢,我在问题中添加了browser+版本。好像我需要更多的证据证明Firefox是一个愚蠢的浏览器:d问题在Firebug中,而不是Firefox中。:)谢谢,我想我现在可以拿到了。我仍然不完全理解Firebug对console.log
:function(){return function.apply.call(x.log,x,arguments);}
的实现,但这是另一个问题。