Подтвердить что ты не робот

Как проверить класс экземпляра в Javascript?

Возможный дубликат:
Как получить класс объекта JavaScript?

В Ruby я мог бы сделать это, чтобы проверить класс экземпляра:

'this is an string'.class

=>String

Есть ли что-нибудь подобное в js?

4b9b3361

Ответ 1

Вероятно, вы имеете в виду тип или конструктор, а не класс. Класс имеет другое значение в 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]"

См. соответствующую статью MDN.

Чтобы получить конструктор или прототип, существует несколько способов, в зависимости от того, что вам нужно.

Чтобы узнать, какой тип примитива у вас есть, используйте 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".

Вы также можете получить прототип, наследственное наследование JavaScript, с Object.getPrototypeOf(myObject) (или myObject.__proto__ или myObject.constructor.prototype в некоторых браузерах, когда getPrototypeOf не поддерживается).

Вы можете проверить конструктор с помощью instanceof:

new Date() instanceof Date;  // => true

Вы также можете получить конструктор с myObject.constructor, хотя имейте в виду, что это можно изменить. Чтобы получить имя конструктора, используйте myObject.constructor.name.

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

Ответ 2

Не уверен, что это касается всех браузеров, но вы можете использовать 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, вы можете расширить его (есть плюсы и минусы)

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

Примечание: javascript не знает "классы" 1 его модель наследования prototypal

1 из стандарта ECMAScript.

ECMAScript не использует классы, такие как в С++, Smalltalk или Ява. Вместо этого объекты могут создаваться различными способами, включая литеральной нотации или через конструкторы, которые создают объекты, а затем выполнить код, который инициализирует все или часть из них, назначая начальную значения к их свойствам. Каждый конструктор является функцией, которая имеет свойство, названное прототипом, которое используется для реализации прототипов наследование и общие свойства. Объекты создаются с использованием конструкторы в новых выражениях; например, новая дата (2009,11) создает новый объект Date. Вызов конструктора без использования новых имеет последствия, которые зависят от конструктора. Например, Date() создает строковое представление текущей даты и времени, а чем объект.

Ответ 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"

Ответ 4

typeof и instanceof - это то, что вам нужно

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

Вы можете проверить имя конструктора, чтобы получить имя класса конструкторов (или того, что вы называете классом):

> x.constructor.name
> "String"