Мне нужно преобразовать этот код Javascript в ClojureScript. У меня возникли проблемы с ключевым словом this
.
Вот мой JS:
if (!String.prototype.startsWith) {
String.prototype.startsWith = function(searchString, position) {
position = position || 0;
return this.indexOf(searchString, position) === position;
};
}
Я получаю ошибку Object doesn't support property or method 'startsWith'
с компилятором Google Closure в расширенном режиме, поэтому мне нужно добавить этот код. (ИЭ 11)
Что не так с this
? Использование выглядит правильным.
Но что более важно: вы должны использовать настоящий полифилл, а не просто функцию, которая делает что-то похожее на спецификацию. Вот лучшая реализация или хотя бы взять из МДН.
Попробуйте этот код ClojureScript:
(when (not (.. js/String -prototype -startsWith))
(set!
(.. js/String -prototype -startsWith)
(fn [searchString position]
(set! position (or position 0))
(= (this-as this (.indexOf this) searchString position) position))))
В ClojureScript уже есть clojure.string/starts-with?
:
$ clj -Sdeps '{:deps {org.clojure/clojurescript {:mvn/version "RELEASE"}}}' -m cljs.main -re node
ClojureScript 1.10.520
cljs.user=> (require '[clojure.string :as str])
nil
cljs.user=> (str/starts-with? "foobar" "foo")
true
заново найти также может помочь вам найти его.
У меня объект не поддерживает ошибку startsWith свойства или метода после компилятора Google Closure в расширенном режиме.
Какую версию CLJS вы используете? Можете ли вы опубликовать минимальную репродукцию в сути?
«1.10.520», но я получаю эту ошибку только в IE 11.
Что за беда? Что вы пробовали?