自定义对象的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/的想法,由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