【问题标题】:Chrome Console and Javascript Object TypeChrome 控制台和 Javascript 对象类型
【发布时间】:2015-01-21 00:13:39
【问题描述】:

我想找到一个 Javascipt 对象的类型(构造函数的名称),但我一直在用我尝试过的所有方法返回一个通用的“对象”。我在网上搜索过,但没有找到适合我的 Javascript 方法。它总是将对象构造函数类型作为通用“对象”返回。然而它就在那里,当我在 Chrome 控制台中检查它时,它正盯着我看。有什么想法可以在 JS 中获取这些信息吗?

附言。如果有区别,我正在使用 Browserify 的要求来分隔我的代码。

我认为这可能是因为 Browserify 加载 require 代码的原因是因为这是我从 Browserify 加载的构造函数获得的输出:

这是我手动创建构造函数的结果:

不管怎样,无论我如何创建构造函数 var Prey = function() {}var Prey = function Prey() {},Chrome 开发工具似乎仍然知道构造函数的名称,即使 Javascript 似乎不知道。也许这是因为他们可以以 Javascript 语言无法访问的方式检查虚拟机中的代码,但我想知道我是否遗漏了什么。 有谁知道在 Javascript 中确定实例类型的另一种方法?

【问题讨论】:

  • 请说明该对象是如何构造的。
  • 似乎无论构造什么obj 都没有正确设置constructor 属性。
  • @thefourtheye 添加了有关构造函数的更多信息。希望能提供更好的背景。谢谢!

标签: javascript google-chrome types


【解决方案1】:

function Prey(){}; 时看到的 Prey 就是 Prey,因此函数名称是 Prey。如果您将 Prey 定义为 var Prey = function(){};,则函数名称为“”;

所以基本上如果你想使用函数名,你必须给你的构造函数一个名字。 var Prey = function Prey(){};

编辑:或者你可能做了一个变体:

var A = function NAMED(){};
var B = function(){};
B.prototype = Object.create(A.prototype);
var o = new B();

> o 
< B {};

> o.constructor.name
< "NAMED"

【讨论】:

  • 这能解释为什么 obj.constructor.name 是“对象”吗?
  • 但是它不会显示为 Prey... 即使您通过 obj.__proto__ = Prey.prototype 手动设置原型,它也会设置构造函数名称和控制台显示。
猜你喜欢
  • 1970-01-01
  • 2011-01-28
  • 2021-07-31
相关资源
最近更新 更多