Машинопись расширить объект в модуле

голоса
3

То , что я хочу сделать , это действительно похоже на это , и это только я пытаюсь выяснить , как положить ArrayExtension внутри модуля.

Я пытаюсь получить что-то похожее на то, как методы C # расширения работы, таким образом, я могу просто импортировать модуль, и я буду иметь свои дополнительные методы. Ссылки я представил показать, как расширить существующий объект, но я не мог понять, как инкапсулировать, что в модуль.

Задан 11/10/2012 в 01:52
источник пользователем
На других языках...                            


2 ответов

голоса
1

Если вы ориентируетесь среды без браузера , как Node.js это будет возможно , потому что вы будете иметь возможность передавать ссылки на глобальные члены вашего модуля, например Array, к другим модулям. Те , другие модули могут затем продлить переданные в объекте и / или его прототип с дополнительными функциональными возможностями, который будет доступен только с помощью модуля вызова. Другие модули должны делать то же самое для того , чтобы получить эти расширения; Таким образом, конфликты сведены к минимуму , так как импорт явно.

Однако в среде браузера это не так , поскольку существует только один windowобъект , и любые изменения в его член доступны везде. Как только любой из ваших модулей расширить Arrayэти расширения будут доступны для всех остальных модулей - увеличивает вероятность возникновения конфликтов и сделать код труднее рассуждать о.

С учетом сказанного, есть модели в JS, и , следовательно , машинопись, который должен сделать то , что вы хотите. Одним из такого шаблона является «подмешать» модель , которая позволяет добавлять на дополнительной функциональности на объект экземпляр основе. Можно выделить многоразовый код в Смешении модулей , которые затем могут быть применены к объекту , когда это необходимо, или даже автоматически в конструкторах. Посмотрите на это за достойный обзор и реализации примеров: http://javascriptweblog.wordpress.com/2011/05/31/a-fresh-look-at-javascript-mixins/

Ответил 01/11/2012 в 05:48
источник пользователем

голоса
0

Если вы пытаетесь расширить встроенный тип массива вы не можете сделать это внутри модуля. Вы расширение должно жить в файле ArrayEx.ts и происходит вне каких - либо модулей. Причиной этого является то , что если вы сделали это в модуле вы бы расширить Foo.Arrayтип , который не является такой же , как Array.

Но вы сказали , что вы просто хотите , чтобы иметь возможность импортировать модуль , чтобы иметь свои дополнительные методы показать и все , что вам действительно нужно сделать , это добавить /// <reference path='ArrayEx.ts' />в любой файл , который вы хотите методы расширения должны быть доступны для. Это, по сути то же самое.

Ответил 11/10/2012 в 07:07
источник пользователем

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