Question Comment vérifier la classe d'une instance en Javascript? [dupliquer]


Duplication possible:
Comment obtenir une classe d'objet JavaScript? 

En Ruby, je pouvais faire ceci pour vérifier la classe d'une instance:

'this is an string'.class

=>String

Y a-t-il une chose similaire dans js?


13
2017-08-18 12:55


origine


Réponses:


Vous voulez probablement dire type ou constructeur, pas classe. La classe a une signification différente en JavaScript.

Pour obtenir le cours:

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]"

Voir cet article lié MDN.

Pour obtenir le constructeur ou le prototype, il existe plusieurs façons, en fonction de vos besoins.

Pour découvrir quel type de primitive vous avez, utilisez typeof. C'est la meilleure chose à utiliser avec des chaînes, des booléens, des nombres, etc.:

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

Prenez garde que null agit bizarrement dans ce cas, comme typeof null te donnera "object", ne pas "null".

Vous pouvez également obtenir le prototype, l’héritage JavaScript du backbone, avec Object.getPrototypeOf(myObject) (ou myObject.__proto__ ou myObject.constructor.prototype dans certains navigateurs quand getPrototypeOf n'est pas supporté).

Vous pouvez tester le constructeur avec instanceof:

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

Vous pouvez aussi raisonnablement obtenir le constructeur avec myObject.constructor, bien que sachez que cela peut être changé. Pour obtenir le nom du constructeur, utilisez myObject.constructor.name.

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

32
2017-08-18 13:17



Vous ne savez pas si cela vaut pour tous les navigateurs, mais vous pouvez utiliser 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

Tandis que Object est la mère de tout en javascript, vous pouvez le prolonger (il y a avantages et inconvénients à elle)

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

Remarque: javascript ne sait pas les 'classes'1, son modèle d'héritage est prototypal

1 du standard ECMAScript.

ECMAScript n'utilise pas de classes telles que C ++, Smalltalk ou   Java. Au lieu de cela, les objets peuvent être créés de différentes manières, y compris via un   notation littérale ou via des constructeurs qui créent des objets, puis   exécuter du code qui en initialise tout ou partie en assignant   valeurs à leurs propriétés. Chaque constructeur est une fonction qui a un   propriété nommée prototype qui est utilisé pour implémenter un prototype   héritage et propriétés partagées. Les objets sont créés en utilisant   constructeurs dans les nouvelles expressions; par exemple, nouvelle date (2009,11)   crée un nouvel objet Date. Invoquer un constructeur sans utiliser new   a des conséquences qui dépendent du constructeur. Par exemple, Date ()   produit une représentation sous forme de chaîne de la date et de l'heure actuelles plutôt   qu'un objet.


9
2017-08-18 13:11



En js vous pouvez utiliser:

typeof

eq.

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
2017-08-18 13:01



typeof et instanceof est ce qu'il vous faut

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

Vous pouvez vérifier le nom du constructeur pour obtenir un nom de classe de constructeur (ou ce que vous appelez une classe):

> x.constructor.name
> "String"

2
2017-08-18 12:58