Maszynopis rozszerzyć przedmiot w module

głosy
3

Co chcę zrobić, to bardzo podobny do tego , a to chyba próbuję dowiedzieć się, jak położyć ArrayExtension wewnątrz modułu.

Próbuję uzyskać coś podobnego do sposobu C # metody przedłużania pracy, w ten sposób można po prostu zaimportować moduł, a ja mam swoje dodatkowe metody. Linki ja przewidziane pokazują, jak rozszerzyć istniejący obiekt, ale nie byłem w stanie dowiedzieć się, jak ująć to w module.

Utwórz 11/10/2012 o 01:52
źródło użytkownik
W innych językach...                            


2 odpowiedzi

głosy
1

Jeśli kierujesz środowisk innych niż przeglądarki jak node.js to będzie możliwe, ponieważ będzie można przekazać odniesienia do globalnych członków module, takich jak Array, do innych modułów. Te inne moduły można następnie rozszerzyć przekazywane w obiekcie i / lub jego prototyp z dodatkowych funkcji, które będą dostępne tylko przez moduł wywołującego. Inne moduły musiałby zrobić to samo w celu uzyskania tych rozszerzeń; Dlatego konflikty są zminimalizowane, ponieważ przywóz są jednoznaczne.

Jednak w środowisku przeglądarek nie jest to przypadek, ponieważ istnieje tylko jeden windowprzedmiot, a wszelkie zmiany jej członków są dostępne wszędzie. Tak szybko, jak którykolwiek z modułów rozszerzyć Arrayte rozszerzenia byłyby dostępne dla wszystkich pozostałych modułów - zwiększenie możliwości konfliktów i podejmowania kod trudniej powodu ok.

Z powiedział, że istnieją wzorce w JS, a zatem maszynopis, który powinien osiągnąć to, co chcesz. Jednym z takich modeli jest „wstawek” wzór, który pozwala na dodanie dodatkowych funkcji na obiekt instancji podstawie. Można oddzielić wielokrotnego użytku kodu na moduły wstawianej które mogą być następnie stosowane do obiektu, gdy są potrzebne, a nawet automatycznie w konstruktorów. Spójrz na to za przyzwoitą przykładów przeglądu i realizacja: http://javascriptweblog.wordpress.com/2011/05/31/a-fresh-look-at-javascript-mixins/

Odpowiedział 01/11/2012 o 05:48
źródło użytkownik

głosy
0

Jeśli starasz się przedłużyć wbudowanego typu Array nie można tego zrobić w module. Jesteś rozszerzenie będzie musiał żyć w pliku ArrayEx.ts i występują poza jakimkolwiek modułów. Powodem tego jest to, że jeśli zrobił to w module chcesz być rozszerzenie Foo.Arraytypu, który nie jest taki sam jak Array.

Ale mówiłeś, że po prostu chcą, aby móc importować moduł mieć swoje dodatkowe sposoby pokazania się i wszystko co naprawdę trzeba zrobić, to dodać /// <reference path='ArrayEx.ts' />do każdego pliku, który ma metody przedłużania być dostępne. Jest to w zasadzie to samo.

Odpowiedział 11/10/2012 o 07:07
źródło użytkownik

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more