2011-09-12 3 views
0

J'utilise un framework qui permet l'inclusion de fichiers JS. Au sommet de mon fichier JS J'ai quelque chose comme:Comment mieux écraser une méthode d'objet Javascript

<import resource="classpath:/templates/webscripts/org/mycompany/projects/library/utils.lib.js"> 

Je veux remplacer une méthode assez petite qui est définie dans le fichier utils.lib.js très grand. Plutôt que d'effectuer la modification directement dans utils.lib.js, un fichier qui fait partie du framework, je souhaite remplacer une seule méthode. Le fichier utils.lib.js a quelque chose qui ressemble à:

var Evaluator = 
{ 
    /** 
    * Data evaluator 
    */ 
    getData: function Evaluator_getData(input) 
    { 
      var ans; 

      return ans; 
    }, 
    ... 
} 

Je veux changer tout ce que fait la méthode getData. Désolé pour la question de base, mais après avoir importé le fichier qui copie le contenu JS dans le haut de mon fichier JS, puis-je faire quelque chose comme:

Evaluator.getData = function Mine_getData(input) 
       { 
        ... 
       }; 
+2

Avez-vous essayé? –

Répondre

3

Oui, vous pouvez simplement réaffecter cette méthode à votre propre fonction comme vous l'avez proposé avec:

Evaluator.getData = function Mine_getData(input) 
{ 
    ... 
}; 

Cela va changer avec succès ce qui se passe lorsque la .getData(input) propriété est appelée.

+2

Comment voulez-vous charger la fonction d'origine? Sauvegardez-le au préalable en passant 'var foo = Evaluator.getData;' et plus tard dans la nouvelle fonction appelant 'foo()'? – simbabque

0

Oui, vous pouvez.

Cependant, l'évaluateur n'est pas une «classe» appropriée. Vous ne pouvez pas écrire var x = new Evaluator(); Vous ne remplacez donc pas la variable getData. C'est pourquoi nous disons qu'en JavaScript, les fonctions sont des citoyens de première classe, traités comme n'importe quelle variable.

Questions connexes