Как работать одновременно с подчеркиванием и подчеркиванием .string?
Я использую подчеркивание для своих проектов, но теперь я хочу расширить его с помощью underscore.string
Я прочитал их документацию, и, похоже, у меня могут быть проблемы с использованием обоих, если я не буду принимать дополнительные меры, которые они говорят:
var _ = require('underscore');
// Import Underscore.string to separate object, because there are conflict functions (include, reverse, contains)
_.str = require('underscore.string');
// Mix in non-conflict functions to Underscore namespace if you want
_.mixin(_.str.exports());
// All functions, include conflict, will be available through _.str object
_.str.include('Underscore.string', 'string'); // => true
Однако я не знаю, как следовать этим шагам, мне нужна помощь в понимании шагов для работы с обоими и без проблем с ними.
До сих пор я сделал это:
<script src="underscore-min.js" type="text/javascript"></script>
<script src="underscore.string.min.js" type="text/javascript"></script>
Еще один связанный с этим вопрос, когда мне удается работать с обоими, должен ли я всегда использовать _.str
или только для конфликтующих функций?
Ответы
Ответ 1
Как использовать символ underscore.string, по-видимому, написан для использования в node.js, но поскольку вы хотите использовать его в html/js, вы уже начали право, включив эти обе библиотеки.
подчеркивание создаст _
var, и если он присутствует, underscore.string расширит это свойство str
и string
, чтобы вы могли используйте _.str
уже включив два файла.
<script src="underscore-min.js" type="text/javascript"></script>
<script src="underscore.string.min.js" type="text/javascript"></script>
<script type="text/javascript"> _.mixin(_.str.exports()) </script>
Если вы добавите эту последнюю строку к своим включенным, вы можете использовать любой неконфликтный метод из underscore.string, который составляет всего include
, contains
и reverse
в соответствии с исходный файл.
Надеюсь, что это поможет.
Ответ 2
Если вы хотите использовать _
вместо _.str
для каждой функции (даже конфликтующих), вы можете динамически выбирать между конфликтующими методами на основе типа аргумента:
(function(_contains, _include) {
_.mixin(_.str.exports());
_.mixin({
reverse: function(obj) {
if (typeof obj === "string") {
return _.str.reverse(obj);
}
return obj.reverse();
},
contains: function(obj, value) {
if (typeof obj === "string") {
return _.str.contains(obj, value);
}
return _contains.apply(this, arguments);
},
include: function(obj, value) {
if (typeof obj === "string") {
return _.str.include(obj, value);
}
return _include.apply(this, arguments);
}
});
})(_.contains, _.include);
Ответ 3
В версии 3.x просто используйте глобальный s
вместо _.mixin()
в пространство имен подчеркивания.
Вот заметки изменений на странице Underscore.string
Это все, что вам нужно для версии 3.x
<script src="underscore-min.js" type="text/javascript"></script>
<script src="underscore.string.min.js" type="text/javascript"></script>
Использование в качестве Underscore.js или Lo-Dash mixin теперь обескуражено, поскольку существует слишком много сталкивающихся методов