Strojopis rozšířit objekt modulu

hlasů
3

To, co chci udělat, je ve skutečnosti podobná této , a to s výjimkou Snažím se přijít na to, jak dát ArrayExtension uvnitř modulu.

Snažím se dostat něco podobného způsobu C # rozšíření metody fungují, bude to tak mohu jen importovat modul a já budu mít své další metody. Odkazy I uvedené ukazují, jak rozšířit stávající objekt, ale já jsem nebyl schopen přijít na to, jak k zapouzdření, že do modulu.

Položena 11/10/2012 v 01:52
zdroj uživatelem
V jiných jazycích...                            


2 odpovědí

hlasů
1

Pokud cílíte prostředí non-prohlížeče, jako je Node.js to bude možné, protože budete moci projít odkazy na globálních členy vašeho modulu, například Array, do jiných modulů. Tyto další moduly pak lze rozšířit prošel v objektu a / nebo jeho prototyp s další funkce, která bude přístupná pouze volající modul. Ostatní moduly budou muset udělat to samé, aby si tato rozšíření; Proto, konflikty jsou minimalizovány, protože dovoz jsou jednoznačné.

Nicméně, v prostředí prohlížeče toto není ten případ, protože je tam jen jeden windowobjekt a případné změny jejích členů jsou k dispozici všude. Jakmile se některý z vašich modulů rozšířila Arraytyto rozšíření by být k dispozici pro všechny ostatní moduly - zvyšuje možnost konfliktů a dělat kód těžší důvodu asi.

Díky, že řekl, existují vzory v JS, a proto psacím stroji, které by měly dosáhnout toho, co chcete. Jeden takový vzor je ‚mixin‘ vzor, který vám umožní přidat na další funkce na objekt instance bázi. Dalo by se oddělit opakovaně použitelného kódu do mixin modulů, které by pak mohly být aplikovány na objekt v případě potřeby, nebo dokonce automaticky konstruktérů. Podívejte se na to na slušný přehled a implementačních příkladech: http://javascriptweblog.wordpress.com/2011/05/31/a-fresh-look-at-javascript-mixins/

Odpovězeno 01/11/2012 v 05:48
zdroj uživatelem

hlasů
0

Pokud se snažíte rozšířit vestavěný typu Array nemůžete dělat, že v rámci modulu. Jsi rozšíření bude muset žít v souboru ArrayEx.ts a vyskytují se mimo všechny moduly. Důvodem pro to je, že pokud jste to udělal v rámci modulu byste se rozšiřuje Foo.Arraytyp, který není stejný jako Array.

Ale říkal jste si jen chcete, aby bylo možné importovat modul mít svůj další metody ukázat a vše, co opravdu potřebujete udělat, je přidat /// <reference path='ArrayEx.ts' />do jakéhokoli souboru, který chcete metody prodlužování být k dispozici. To je v podstatě to samé.

Odpovězeno 11/10/2012 v 07:07
zdroj uživatelem

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