Étendre la machine à écrire dans le module objet

voix
3

Ce que je veux faire est vraiment similaire à ce et ce sauf que je suis en train de comprendre comment mettre ArrayExtension l' intérieur d' un module.

Je suis en train de faire quelque chose de semblable aux méthodes façon d'extension C # travail, de cette façon, je peux importer le module et je vais avoir mes méthodes supplémentaires. Les liens que je fournis montrent comment étendre un objet existant, mais je n'ai pas été en mesure de comprendre comment encapsulent que dans un module.

Créé 11/10/2012 à 01:52
source utilisateur
Dans d'autres langues...                            


2 réponses

voix
1

Si vous ciblez des environnements non-navigateur comme Node.js ce sera possible parce que vous serez en mesure de passer des références aux membres globaux de votre module, par exemple Array, à d' autres modules. Ces autres modules peuvent alors étendre le passé dans l' objet et / ou son prototype avec des fonctionnalités supplémentaires qui sera uniquement accessible par le module d'appel. D' autres modules devraient faire la même chose afin d'obtenir ces extensions; Par conséquent, les conflits sont réduits au minimum puisque les importations sont explicites.

Cependant, dans des environnements de navigateur ce n'est pas le cas car il n'y a qu'un seul windowobjet et toute modification apportée à ses membres sont disponibles partout. Dès que l' un de vos modules étendu Arrayces extensions seront disponibles à tous les autres modules - de plus en plus la possibilité de conflits et de rendre le code plus difficile à raisonner sur.

Cela dit, il existe des modèles de JS, et donc tapuscrit, qui devrait accomplir ce que vous voulez. Un tel modèle est le modèle « mixin » qui vous permet d'ajouter des fonctionnalités supplémentaires sur un objet par exemple base. Vous pouvez séparer le code réutilisable en modules mixins qui pourraient ensuite être appliqués à un objet en cas de besoin, ou même automatiquement dans les constructeurs. Jetez un oeil à ce pour un aperçu décent et des exemples de mise en œuvre: http://javascriptweblog.wordpress.com/2011/05/31/a-fresh-look-at-javascript-mixins/

Créé 01/11/2012 à 05:48
source utilisateur

voix
0

Si vous essayez d'étendre le type construit Array vous ne pouvez pas le faire dans un module. Vous êtes l' extension devra vivre dans un fichier ArrayEx.ts et se produire en dehors de tous les modules. La raison en est que si vous l' avez fait dans un module , vous seriez prolongez le Foo.Arraytype qui ne sont pas les mêmes que Array.

Mais vous avez dit que vous voulez juste pouvoir importer le module d'avoir vos méthodes supplémentaires apparaissent et tout ce que vous avez vraiment besoin de faire est d' ajouter un /// <reference path='ArrayEx.ts' />à tout fichier que vous voulez que les méthodes d'extension soient disponibles à. Ceci est essentiellement la même chose.

Créé 11/10/2012 à 07:07
source utilisateur

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