2013-01-15 1 views
3

Je souhaite ajouter ou redéfinir certaines méthodes standard d'objet, de fonction et de tableau (par exemple, comme suggéré dans this answer) dans l'application node.js. Comment dois-je faire tous les "patches" dans un seul module afin qu'il affecte tous mes autres modules? Sera-t-il suffisant si je le fais dans un module qui est juste require 'd ou cela ne fonctionnera pas parce que les deux modules ont des espaces de noms globaux différents donc ils ont un objet différent? ... Ou devrais-je lancer une initialisation fonction après require qui fait tous ces "patches" fonctionnant dans ce module aussi?Où changer les prototypes d'objets dans node.js?

Répondre

4

Chaque fichier chargé partage les mêmes objets primordiaux comme Object, Array, etc., sauf s'il est exécuté dans un contexte vm différent, ce qui nécessite que le fichier une fois dans votre initialisation fasse les changements partout.

+0

Voulez-vous dire qu'il est encore assez pour exiger ce module avec des « patches » une fois, seulement dans mon module principal, et je ne besoin de l'exiger dans chaque module que je veux avoir Object & co "patché"? – esp

+1

Oui, il suffit de l'exiger une seule fois. Tous les modules du nœud partagent la même portée globale. Ils ont une portée * module * différente, mais la même portée globale. Donc, ils ont les mêmes 'Object',' Function', 'Array', etc. –

+1

Cela fonctionne pour Function.prototype et Array.prototype, mais quand j'essaye de le faire avec Object.prototype, il lance TypeError: TypeError: La description de la propriété doit être un objet: undefined at Function.defineProperty (native) à Object. (/opt/nginx/html/dev.stockscompare/node_modules/express/lib/express.js:53:10) – esp

8
//require the util.js file 
require('./util.js'); 

var a = []; 
a.doSomething(); 

dans votre fichier « util.js »:

//in your util.js file you don't have to write a module, just write your code... 
Array.prototype.doSomething = function(){console.log("doSomething")}; 
Questions connexes