2010-10-14 7 views
1

Prenons l'exemple suivant:Comment puis-je tester si un objet Javascript a une méthode avec un nom donné?

var Container = function(param) { 
    this.member = param; 
    var privateVar = param; 
    if (!Container.prototype.stamp) { // <-- executed on the first call only 
     Container.prototype.stamp = function(string) { 
      return privateVar + this.member + string; 
     } 
    } 
} 

var cnt = new Container(); 

Est-il possible de déterminer si l'objet cnt a une méthode nommée stamp sans savoir qu'il est instancié de Container?

Another Example

+0

Je pense que Visual Studio Watcher est cassé :) Parce que cela a fonctionné sur Firebug. – uzay95

Répondre

2

Vous pouvez tester l'existence de stamp avec:

if (cnt.stamp) ... 

ou vous pouvez vérifier si elle est une fonction avec

if (typeof cnt.stamp === 'function') ... 
+0

S'il vous plaît vérifier ma dernière image. Votre offre ne fonctionne pas !!! :( – uzay95

+0

cela fonctionne si vous le testez séparément dans une console javascript: 'var a = {b: fonction() {}}; typeof ab. Peut-être que f_SetEk n'est pas une fonction? Il sais que c'est un identifiant indéfini dans votre image ... – Tomas

+0

Non c'est fonction mais dans le studio visuel Regarder la fenêtre il ne dit pas que c'est fonction.Mais vous avez raison il fonctionne bien dans le navigateur. – uzay95

2

Vous pouvez utiliser hasOwnProperty

o = new Object(); 
o.prop = 'exists'; 
o.hasOwnProperty('prop');    // returns true 
o.hasOwnProperty('toString');   // returns false 
o.hasOwnProperty('hasOwnProperty'); // returns false 
+0

J'ai vu hasOwnProperty dans quelques exemples qui montrent 'Array.hasOwnProperty ('push')'. Mais dans mon exemple ça ne marche pas! – uzay95

Questions connexes