【问题标题】:Why does prototyping Function not affect console.log?为什么原型功能不影响console.log?
【发布时间】:2013-02-05 19:15:53
【问题描述】:

我对@9​​87654323@ 进行了原型设计,使其具有 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());

没有问题。用typeof console.log 检查console.log 的类型会得到“函数”。这是一个CodePen 来尝试一下。所有这一切都不足为奇,因为除了 console.log.getBody 未定义之外,这是我所期望的。

那么为什么原型设计Function 不会影响console.log?我正在使用 Firefox 18.0.1 和 Firebug 1.11.1。

【问题讨论】:

  • 对我来说很好(IE10)
  • 这在 Chrome 24 中对我来说很好。
  • 谢谢,我在问题中添加了浏览器+版本。

标签: javascript console prototyping


【解决方案1】:

这似乎是 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 对象是 父 browser.xul 的对象。

【讨论】:

  • 好像我需要更多证据证明 Firefox 是一个愚蠢的浏览器:D
  • 问题出在 Firebug,而不是 Firefox。 :)
  • 谢谢,我想我现在可能明白了。我仍然不完全理解 console.log: function () { return Function.apply.call(x.log, x, arguments); } 的萤火虫实现,但这是一个不同的问题。
猜你喜欢
  • 2013-04-28
  • 2018-07-18
  • 1970-01-01
  • 2015-04-19
  • 2021-08-09
  • 2018-01-26
  • 1970-01-01
  • 2020-07-23
  • 2019-04-25
相关资源
最近更新 更多