自定义对象的Javascripttypes

我怎样才能检查,如果我的javascript对象是一个特定的types。

var SomeObject = function() { } var s1 = new SomeObject(); 

在上面的情况下, typeof s1将返回“object”。 这不是很有帮助。 有一些方法来检查s1是否为SomeObjecttypes?

是的,使用instanceof ( MDN链接 | spec链接 ):

 if (s1 instanceof SomeObject) { ... } 

无论你做什么,避免obj.constructor.name或任何string版本的构造函数。 这很好,直到你丑化/缩小你的代码,然后所有的破坏,因为构造函数被重命名为一些模糊(例如:'n'),你的代码仍然会这样做,永远不会匹配:

 // Note: when uglified, the constructor may be renamed to 'n' (or whatever), // which breaks this code since the strings are left alone. if (obj.constructor.name === 'SomeObject') {} 

注意:

 // Even if uglified/minified, this will work since SomeObject will // universally be changed to something like 'n'. if (obj instanceof SomeObject) {} 

(顺便说一下,我需要更高的声誉来评论其他有价值的答案)

你也可以看看他们在php.js中的做法:

http://phpjs.org/functions/get_class:409

来自http://phpjs.org/functions/get_class/的想法,由SeanJA发布。; 删除只能使用对象而不需要正则expression式:

 function GetInstanceType(obj) { var str = obj.constructor.toString(); return str.substring(9, str.indexOf("(")); } function Foo() { this.abc = 123; } // will print "Foo" GetInstanceType(new Foo()); 

我刚刚学会了一个更简单的方法来从构造函数中提取函数名称:

 obj.constructor.name