为什么原型设计功能不会影响console.log?

时间:2013-02-05 19:15:53

标签: javascript console prototyping

我将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。

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。