2014-11-23 82 views
5

我想找到一个Javascipt对象的类型(构造函数的名称),但我一直只用一个通用的“对象”返回所有我尝试过的方法。我在网上搜索,没有找到我的Javascript方法,但还是有效。它始终只是返回对象构造函数类型作为通用的“对象”。然而,当我在Chrome控制台中检查它时,它正盯着我。任何想法如何我可以在JS中获取这些信息?Chrome控制台和Javascript对象类型

PS。我使用Browserify的要求分开我的代码,如果这有所作为。

enter image description here

我想这可能是因为require代码如何Browserify负载是因为这是输出我从Browserify加载构造函数中得到的理由是:

enter image description here

这里是我从手动创建构造函数得到的结果:

enter image description here

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

+3

请表明对象是如何构建的。 – thefourtheye 2014-11-23 03:25:49

+0

看起来似乎任何构造的'obj'都没有正确设置'constructor'属性。 – 2014-11-23 06:27:27

+0

@thefourtheye增加了关于构造函数的更多信息。希望提供更好的上下文。谢谢! – ootoovak 2014-11-30 05:35:44

回答

1

你看到的猎物是猎物当你做function 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" 
+0

这是否解释了为什么obj.constructor.name是“对象”? – arcyqwerty 2014-11-23 05:15:10

+0

但它不会显示为Prey ...即使您通过'obj .__ proto__ = Prey.prototype'手动设置原型,它也会设置构造函数名称和控制台显示。 – arcyqwerty 2014-11-23 05:47:10