如何获取 JavaScript 对象的类?
2022-08-29 22:13:32
我创建了一个JavaScript对象,但是我如何确定该对象的类?
我想要一些类似于Java方法的东西。.getClass()
我创建了一个JavaScript对象,但是我如何确定该对象的类?
我想要一些类似于Java方法的东西。.getClass()
在JavaScript中没有与Java的getClass()
完全对应的对应物。这主要是因为JavaScript是一种基于原型的语言,而不是Java是基于类的语言。
根据你需要什么,JavaScript中有几个选项:getClass()
typeof
instanceof
obj.
constructor
func.
原型
, .isPrototypeOf
proto
举几个例子:
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,使用gulp或grunt。
obj.constructor.name
是现代浏览器中的可靠方法。 在ES6中正式添加到标准中,使其成为将JavaScript对象的“类”作为字符串获取标准的兼容方法。如果对象是用 实例化的,它将返回“MyClass”。Function.name
var obj = new MyClass()
它将返回“数字”作为数字,“数组”和“函数”为函数,等等。它通常按预期运行。它失败的唯一情况是,如果创建的对象没有原型,via,或者该对象是从匿名定义(未命名)函数实例化的。Object.create( null )
另请注意,如果要缩小代码,则与硬编码类型字符串进行比较是不安全的。例如,不要检查 是否,而是检查 。或者只是比较构造函数本身,但是这不会跨DOM边界工作,因为每个DOM上都有不同的构造函数实例,因此对其构造函数进行对象比较将不起作用。obj.constructor.name == "MyType"
obj.constructor.name == MyType.name