我将Function
原型化,以便它具有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,'');
};
有关详细信息,请参阅here。 我试着用这种方式测试它:
console.log(console.log.getBody.getBody());
但收到错误:TypeError: console.log.getBody is undefined
。
我发现可能发生这种情况可能是因为console.log
是在我实际构建原型Function
之前定义的,所以我在原型设计之前创建了一个空函数x
并尝试调用
console.log(x.getBody.getBody());
没有问题。使用console.log
检查typeof console.log
的类型会导致“功能”。这是一个CodePen来试试。所有这一切都不是一个惊喜,因为它是我所期望的,除了console.log.getBody
未定义。
那么为什么原型设计Function
不会影响console.log
?我正在使用Firefox 18.0.1和Firebug 1.11.1。
答案 0 :(得分:5)
这似乎是Firebug的一个问题,而不是Firefox本身。我的猜测是,Firebug中的Function
与您网页中的Function
不同。 (因为与其他浏览器不同,Firebug是一个扩展,而不是内置的浏览器工具)
事实上,如果您使用内置的Firefox控制台(Ctrl+Shift+K)而不是Firebug,您的代码就可以正常运行。
有关Firebug内部的更多信息,请点击此处
http://getfirebug.com/wiki/index.php/Firebug_Internals
这段摘录可能很有趣
当Firebug与Firefox分离时,请以新的或单独的方式打开 窗口,新窗口有自己的范围。在那个范围内,一些Firebug 脚本标签编译以创建回原始的连接 browser.xul窗口。最重要的是,chrome.js对每个顶部都是独一无二的 级别窗口,但是分离窗口使用的Firebug对象是 父浏览器的对象.xul。