Хорошо, я впервые прочитал аннотированный исходный код подчеркивания.Но я думаю, что вы можете сделать что-то вроде этого:
function double(value) { return value * 2; };
var obj = _([42, 43]).addToWrapper({double:double});
obj.chain()
.first()
.double()
.value();
Синтаксис / детали могут быть неправильными, но суть в следующем: когда вы вызываете _([42,43])
, вы вызываете подчеркивание как функцию,Когда вы делаете это, он создает новый объект, а затем смешивает с этим объектом большинство функций подчеркивания.Затем он возвращает этот объект вам.Затем вы можете добавить свои собственные функции к этому объекту, и ничто из этого не загрязняет само пространство имен "_".
Именно так мне выглядел код underscore.js.Если я ошибаюсь, я хотел бы узнать, и, надеюсь, кто-то объяснит, почему.
РЕДАКТИРОВАТЬ: Я на самом деле интенсивно использую underscore.js в течение месяца, и я стал довольно знакомымс этим.Теперь я знаю он ведет себя так, как я сказал здесь.Когда вы вызываете _ как функцию конструктора, вы возвращаете свое собственное «пространство имен» (просто объект) и можете добавлять к нему вещи с помощью addToWrapper (), которые отображаются в вашем пространстве имен, но не в «глобальном» «_»Пространство имен.Таким образом, функция, к которой стремился OP, уже встроена. (И я был действительно впечатлен подчеркиванием, кстати, это очень очень хорошо сделано).