如何获取 JavaScript 对象的类?

2022-08-29 22:13:32

我创建了一个JavaScript对象,但是我如何确定该对象的类?

我想要一些类似于Java方法的东西。.getClass()


答案 1

在JavaScript中没有与Java的getClass()完全对应的对应物。这主要是因为JavaScript是一种基于原型的语言,而不是Java是基于的语言。

根据你需要什么,JavaScript中有几个选项:getClass()

举几个例子:

function Foo() {}
var foo = new Foo();

typeof Foo;             // == "function"
typeof foo;             // == "object"

foo instanceof Foo;     // == true
foo.constructor.name;   // == "Foo"
Foo.name                // == "Foo"    

Foo.prototype.isPrototypeOf(foo);   // == true

Foo.prototype.bar = function (x) {return x+x;};
foo.bar(21);            // == 42

注意:如果您使用Uglify编译代码,它将更改非全局类名。为了防止这种情况,Uglify有一个--mangle参数,你可以将其设置为false,使用gulpgrunt


答案 2
obj.constructor.name

是现代浏览器中的可靠方法。 在ES6中正式添加到标准中,使其成为将JavaScript对象的“类”作为字符串获取标准的兼容方法。如果对象是用 实例化的,它将返回“MyClass”。Function.namevar obj = new MyClass()

它将返回“数字”作为数字,“数组”和“函数”为函数,等等。它通常按预期运行。它失败的唯一情况是,如果创建的对象没有原型,via,或者该对象是从匿名定义(未命名)函数实例化的。Object.create( null )

另请注意,如果要缩小代码,则与硬编码类型字符串进行比较是不安全的。例如,不要检查 是否,而是检查 。或者只是比较构造函数本身,但是这不会跨DOM边界工作,因为每个DOM上都有不同的构造函数实例,因此对其构造函数进行对象比较将不起作用。obj.constructor.name == "MyType"obj.constructor.name == MyType.name