Возможный дубликат:
Как получить класс объекта JavaScript?
В Ruby я мог бы сделать это, чтобы проверить класс экземпляра:
'this is an string'.class
=>String
Есть ли что-нибудь подобное в js?
Возможный дубликат:
Как получить класс объекта JavaScript?
В Ruby я мог бы сделать это, чтобы проверить класс экземпляра:
'this is an string'.class
=>String
Есть ли что-нибудь подобное в js?
Вероятно, вы имеете в виду тип или конструктор, а не класс. Класс имеет другое значение в 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'
Не уверен, что это касается всех браузеров, но вы можете использовать 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() создает строковое представление текущей даты и времени, а чем объект.
В 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"
typeof
и instanceof
- это то, что вам нужно
> x = "Hello, World!"
"Hello, World!"
> typeof x
"string"
Вы можете проверить имя конструктора, чтобы получить имя класса конструкторов (или того, что вы называете классом):
> x.constructor.name
> "String"