如何获取JavaScript对象的类?

半世苍凉 提交于 2019-12-25 22:05:46

【推荐】2019 Java 开发者跳槽指南.pdf(吐血整理) >>>

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

我想要类似于Java的.getClass()方法。


#1楼

JavaScript中没有与Java的getClass()完全相同的对象。 大多数情况下,这是由于JavaScript是基于原型的语言 ,而不是Java是基于类的 语言

根据您需要getClass()的不同,JavaScript中有几个选项:

一些例子:

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参数,您可以使用gulpgrunt设置为false。


#2楼

Javascript是一种无类语言:没有类可以像Java中一样静态地定义类的行为。 JavaScript使用原型而不是类来定义对象属性,包括方法和继承。 使用JavaScript中的原型可以模拟许多基于类的功能。


#3楼

您可以使用构造函数属性获取对创建对象的构造函数的引用:

function MyObject(){
}

var obj = new MyObject();
obj.constructor; // MyObject

如果需要在运行时确认对象的类型,则可以使用instanceof运算符:

obj instanceof MyObject // true

#4楼

在javascript中,没有任何类,但我认为您希望构造函数名称和obj.constructor.toString()会告诉您所需的内容。


#5楼

此函数从Object.prototype.toString.call(someObject) [object class] "undefined""null""class"

function getClass(obj) {
  if (typeof obj === "undefined")
    return "undefined";
  if (obj === null)
    return "null";
  return Object.prototype.toString.call(obj)
    .match(/^\[object\s(.*)\]$/)[1];
}

getClass("")   === "String";
getClass(true) === "Boolean";
getClass(0)    === "Number";
getClass([])   === "Array";
getClass({})   === "Object";
getClass(null) === "null";
// etc...
标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!