2011-08-05 13 views
5

Jeśli utworzyć moduł node.js "augs", które zawieraCzy mogę powiększyć obiekt, funkcję, datę itd. Za pomocą "metod statycznych" w węźle?

Object.foo = "bar"; 

Następnie wpisać rEPL

require("./augs"); 
typeof Object.foo 

wrócę 'undefined'.

Mamy znaczną ilość kodu w naszej aplikacji internetowej, która opiera się na metodach convenience dodawanych do Object, Function, Date itp staramy się udostępniać kodu między frontend i backend, ale wydaje się, że węzeł resetuje te funkcje konstruktorów lub w inny sposób zapobiega wyciekaniu przez nie zmian w danym module do innych modułów. Chociaż jest to dość sprytne i doceniam poziom ochrony, czy jest jakiś sposób, aby powiedzieć "Wiem, co robię, proszę pozwolić mi uzupełnić Object"?

Odpowiedz

4

Zakładając augs.js zawiera następujące elementy:

exports.augment = function(o) { 
    o.foo = "bar"; 
} 

Augment Object tak:

> var aug = require("./augs.js"); 
> aug.augment(Object); 
> typeof Object.foo 
'string' 

Uwaga: Załóżmy również eksportować następującą funkcję:

exports.getObject = function() { 
    return Object; 
} 

Następnie:

> var aug = require("./augs.js") 
> aug.getObject() == Object 
false 
+0

Tak, myślę, że to zadziała; Musiałbym jednak przekonwertować nasz (raczej duży) 'augs.js' do modułu eksportującego, który jest do niczego. Dziękuję również za wskazanie, że 'Obiekt' z jednego modułu nie jest' == '' Obiekt' z innego modułu. – Domenic

+0

@lwburk można rozwinąć w Object różni się w różnych modułach? –

+0

@Peter - Po prostu, tubylcy w module nie są tymi samymi odpowiednikami, co w skrypcie, który załadował ten moduł. Ponadto: "W chwili obecnej, jak w przypadku modułów 1.1, specyfikacja, w której środowisko decyduje się na implementację klas rodzimych w modułach, jest" nieokreślona ", co oznacza, że ​​decyzja o tym, jak powinna działać, należy do poszczególnych implementacji środowiska." http://wiki.commonjs.org/wiki/Modules/Natives –

Powiązane problemy