2010-05-25 18 views
4

Disons que j'ai cette (en supposant la variable nom est « récepteur »):javascript instanceof obtenir le type de nom de chaîne

if (!(receiver instanceof com.HTMLReceiver)) { 
    throw new com.IllegalArgumentException(
     name + " is not an instance of com.HTMLReceiver."); 
} 

J'aimerais tenir ce code à en une méthode commune pour que je puisse appeler comme ceci:

Helper.checkInstance(receiver, "com.HTMLReceiver"); 

Mais je ne sais pas d'un moyen de convertir l'com.HTMLReceiver d'une corde à son type réel pour que je puisse utiliser instanceof dessus.

Y a-t-il un moyen?

Répondre

3

je qualifierais comme:

Helper.checkInstance(receiver, com.HTMLReceiver); 

Cela ne vous permettra pas d'imprimer un nom de type ("com.HTMLReceiver").

ou:

Helper.checkInstance(receiver, com.HTMLReceiver, "com.HTMLReceiver"); 

Vous utilisez la chaîne utilisateur dans l'impression.

Notez que le même type peut avoir plusieurs noms de type

var foo = com.HTMLReceiver; 

foo et com.HTMLReceiver sont des noms pour la même chose.

JavaScript n'a aucun moyen de passer du type au nom de type lui-même.

Si vous passez seulement dans la chaîne, je pense que la seule solution générale est eval.

+0

Semble qu'il veut obtenir le * nom * du constructeur, et le concaténer à l'argument de la chaîne de l'exception ... – CMS

+0

Cool, cela semble prometteur. Mais pourquoi ça ne marche pas avec "instanceof Number"? – dcp

+0

Vous ne savez pas à quoi fait référence 'name', mais il semble que cela ait quelque chose à voir avec' receiver'. – Anurag