2011-06-08 3 views
1

Est-il possible de construire un objet d'une manière de retourner les éléments suivants:objet Javascript à se comporter différemment, en fonction de fin d'index: foo vs foo()

baseObject.foo; // return a string describing what foo does 
baseObject.foo(); // execute the foo function 

baseObject.bar; // bar description 
baseObject.bar(); // execute bar 

Mise à jour: JavaScript Method Overloading est proche, mais pas tout à fait ce que je cherche.

Update2: jsfiddle (des solutions fournies ci-dessous).

Répondre

4

baseObject.foo doit être une fonction, sinon vous ne pourrez pas l'appeler. La seule chose que vous pouvez influencer est comment cette fonction est contrainte à une chaîne, en remplaçant sa méthode toString(). Par défaut toString() renvoie le code source de la fonction, vous pouvez le faire retourner quelque chose d'autre à la place.

baseObject.foo = function() { 
    // Do something 
} 
baseObject.foo.toString = function() { 
    return "Function does something"; 
} 
alert(baseObject.foo); 
+0

Merci pour la réponse, et expliquez pourquoi cela fonctionne. –

6

Vous pouvez remplacer la méthode par défaut toString de la fonction:

baseObject.foo = function() { console.log('executing foo') } 
baseObject.foo.toString = function() { return 'This function outputs "executing foo"'; } 
+0

+1: Merci! Rapide et concis. –

Questions connexes