如何在Javascript中检查实例的类?

时间:2012-08-18 12:55:11

标签: javascript

  

可能重复:
  How to get a JavaScript Object's Class?

在Ruby中,我可以这样做来检查实例的类:

'this is an string'.class

=>String

js中有类似的东西吗?

4 个答案:

答案 0 :(得分:37)

你可能是指类型或构造函数,而不是类。类在JavaScript中具有不同的含义。

获得课程:

var getClassOf = Function.prototype.call.bind(Object.prototype.toString);
getClassOf(new Date());     // => "[object Date]"
getClassOf('test string');  // => "[object String]"
getClassOf({ x: 1 });       // => "[object Object]"
getClassOf(function() { }); // => "[object Function]"

See this related MDN article.

要获得构造函数或原型,有几种方法,具体取决于您的需要。

要了解您拥有的原语类型,请使用typeof。这是使用字符串,布尔值,数字等的最佳选择:

typeof 'test string';  // => 'string'
typeof 3;              // => 'number'
typeof false;          // => 'boolean'
typeof function() { }; // => 'function'
typeof { x: 1 };       // => 'object'
typeof undefined;      // => 'undefined'

请注意null在这种情况下表现得很奇怪,因为typeof null会给你"object",而不是"null"

如果不支持Object.getPrototypeOf(myObject),您还可以在某些浏览器中使用myObject.__proto__(或myObject.constructor.prototypegetPrototypeOf获取原型(主干JavaScript继承)。< / p>

您可以使用instanceof

测试构造函数
new Date() instanceof Date;  // => true

您也可以合理地使用myObject.constructor获取构造函数,但请注意,这可以更改。要获取构造函数的名称,请使用myObject.constructor.name

new Date().constructor.name;   // => 'Date'

答案 1 :(得分:10)

不确定这适用于所有浏览器,但您可以使用constructor.name

'some string'.constructor.name; //=>String
({}).constructor.name           //=>Object
(7.3).constructor.name          //=>Number
[].constructor.name             //=>Array
(function(){}).constructor.name //=>Function
true.constructor.name           //=>Boolean
/test/i.constructor.name        //=>RegExp
(new Date).constructor.name     //=>Date
(new function MyConstructor(){}())
  .constructor.name;            //=>MyConstructor

虽然Object是Javascript中所有人的母亲,但你可以扩展它(pros and cons就可以了)

Object.prototype.class = function(){
  return this.constructor.name;
}
'some string'.class(); //=>String
(23).class();          //=>Number
// etc...

注意:javascript不知道“类” 1 ,其继承模型为prototypal

来自ECMAScript标准的

1

  

ECMAScript不使用C ++,Smalltalk或者类中的类   Java的。相反,可以以各种方式创建对象,包括通过a   文字符号或通过构造器创建对象然后   通过分配初始化来执行初始化全部或部分的代码   值属性。每个构造函数都是一个函数   属性命名为prototype,用于实现基于原型的   继承和共享属性。对象是使用创建的   新表达式中的构造函数;例如,新日期(2009,11)   创建一个新的Date对象。在不使用new的情况下调用构造函数   具有依赖于构造函数的后果。例如,Date()   生成当前日期和时间的字符串表示   而不是一个对象。

答案 2 :(得分:3)

在js中你可以使用:

typeof

当量

var a="this is string";
typeof a; // return "string"

function abc(){}
typeof abc; // return "function"

var a = {a:1,b:2,c:3}
typeof a; return "object"

答案 3 :(得分:2)

您需要

typeofinstanceof

> x = "Hello, World!"
"Hello, World!"
> typeof x
"string"

您可以检查构造函数名称以获取构造函数类的名称(或者您称之为类的名称):

> x.constructor.name
> "String"