【推荐】2019 Java 开发者跳槽指南.pdf(吐血整理) >>>
我创建了一个JavaScript对象,但是如何确定该对象的类呢?
我想要类似于Java的.getClass()
方法。
#1楼
JavaScript中没有与Java的getClass()
完全相同的对象。 大多数情况下,这是由于JavaScript是基于原型的语言 ,而不是Java是基于类的 语言 。
根据您需要getClass()
的不同,JavaScript中有几个选项:
-
typeof
-
instanceof
-
obj.
constructor
-
func.
prototype
,proto
。isPrototypeOf
一些例子:
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
参数,您可以使用gulp或grunt设置为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...
来源:oschina
链接:https://my.oschina.net/u/3797416/blog/3147421