javascript - Chrome 调试器中显示的 "class name"是基于什么?可以控制吗?

标签 javascript google-chrome

Chrome 调试器中显示的“类名”是如何确定的?它们基于什么?

例如,对于 function Foo() {},“类名”非常明显:

> function Foo() {}
> new Foo()
Foo {} // shows the "class name" Foo

这似乎是由 .name 属性控制的,但事实并非如此:

> Foo.name = "NotFoo"
> new Foo()
Foo {} // shows "Foo", not "NotFoo"

但有时它会非常令人惊讶:

> function subclass(base, methods) {
  var initializer = methods.__init__;
  initializer.prototype = $.extend(initializer.prototype, base.prototype, methods);
  return initializer;
}
> Bar = subclass(Object, { __init__: function() {} });
> new Bar()
subclass.__init__ {__init__: function} // Shows "subclass.__init__"… ?!

那个“类名”是怎么确定的?

此外,是否可以控制或修改?

这似乎是 Chrome 特有的,因为 Firefox 似乎没有尝试猜测第二个示例中的“类名”。

最佳答案

Google Chrome 的官方网站对此没有帮助,但我向您指出了这一点:

How are javascript class names calculated for custom classes in Chrome Dev Tools?

我不认为你可以覆盖 chrome 控制台的“演绎”机制。

一些控制台游戏:

>>function Foo(){}
>>function NotFoo(){}
>>var a = new Foo();
>>a.constructor = NotFoo;
>>a
Foo {constructor: function}
constructor: function NotFoo(){}
__proto__: Foo
>> a instanceof Foo
true
>> a.__proto__.constructor.name
"Foo"
>> a.__proto__.constructor.name = "NotFoo"
"NotFoo"
>> a
Foo {constructor: function}
>> a instanceof Foo
true

如果 chrome 开发人员想让它完全不可覆盖,您可以看到他们如何根据 webkit 的 instanceof 实现进行检查...

和: How to check the class of an instance in Javascript?

关于javascript - Chrome 调试器中显示的 "class name"是基于什么?可以控制吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20668358/

相关文章:

javascript - 如何从 tds 添加多个字符串?

java - 获取带有前缀和后缀的文件名

selenium - 此版本的 ChromeDriver 尚未通过 facebook/php-webdriver 使用 Selenium ChromeDriver 和 Chrome 测试 Chrome 版本 75 错误

jquery - Chrome 和 Firefox 中禁用表单输入的工作方式不同

javascript - Chrome 滚动在页面重新加载时不起作用

javascript - 使用 Javascript 下载文件/url

javascript - jQuery 访问父对象属性?

javascript - HTML5 : Filesystem API Chrome 30 - Unexpected errorHandler call

javascript - chrome 中的程序化书签

javascript - 在现代浏览器中上传文件的最佳方式是什么