Dans l'ES6, comment voulez-vous vérifier la classe d'un objet?
Dans l'ES6, si je fais une classe et de créer un objet de cette classe, comment puis-je vérifier que l'objet est la classe?
Je ne peut pas utiliser de typeof
parce que les objets sont toujours "object"
. Dois-je simplement comparer les constructeurs?
Exemple:
class Person {
constructor() {}
}
var person = new Person();
if ( /* what do I put here to check if person is a Person? */ ) {
//do stuff
}
Vous devez vous connecter pour publier un commentaire.
Ne peut pas vous faire
person instanceof Person
?Comparant les constructeurs seul ne fonctionnera pas pour les sous-classes
B
etC
, alors votre problème est que vous avez réellement faitB
hériter deC
lorsque vous n'avez pas l'intention de. Comment êtes-vous la mise en œuvre de votre héritage?instanceof
ne pas faire de ce type de vérification de la façon dont vous vous attendez à des vérifications similaires à le faire dans des langages fortement typés. Au lieu de cela, il effectue un contrôle d'identité sur le prototype de l'objet, et c'est facile à berner. Il ne fonctionnera pas sur des contextes d'exécution, par exemple (une source commune de bugs, de la frustration, et inutile de limitations). Pour référence, un exemple dans la nature, de bacon.js: github.com/baconjs/bacon.js/issues/296dynamic_cast
et de classes dans les unités de compilation. Si cela ne se comportent comme fortement typées langues, même si vous ne vous attendez pas d'eux non plus.Juste un mot de prudence, l'utilisation de
instanceof
semble vouée à l'échec pour les littéraux de construction-JS les classes (par exemple,String
,Number
, etc). Dans ces cas, il peut être plus sûr d'utilisertypeof
comme suit:typeof("foo") === "string";
Reportez-vous à ce fil pour plus d'info.