Реализация String.prototype.startsWith в ClojureScript

Мне нужно преобразовать этот код 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)

Что за беда? Что вы пробовали?

str 28.05.2019 10:04

Что не так с this? Использование выглядит правильным.

Jack Bashford 28.05.2019 10:05

Но что более важно: вы должны использовать настоящий полифилл, а не просто функцию, которая делает что-то похожее на спецификацию. Вот лучшая реализация или хотя бы взять из МДН.

str 28.05.2019 10:06
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
В настоящее время производительность загрузки веб-сайта имеет решающее значение не только для удобства пользователей, но и для ранжирования в...
Безумие обратных вызовов в javascript [JS]
Безумие обратных вызовов в javascript [JS]
Здравствуйте! Юный падаван 🚀. Присоединяйся ко мне, чтобы разобраться в одной из самых запутанных концепций, когда вы начинаете изучать мир...
Система управления парковками с использованием HTML, CSS и JavaScript
Система управления парковками с использованием HTML, CSS и JavaScript
Веб-сайт по управлению парковками был создан с использованием HTML, CSS и JavaScript. Это простой сайт, ничего вычурного. Основная цель -...
JavaScript Вопросы с множественным выбором и ответы
JavaScript Вопросы с множественным выбором и ответы
Если вы ищете платформу, которая предоставляет вам бесплатный тест JavaScript MCQ (Multiple Choice Questions With Answers) для оценки ваших знаний,...
0
3
195
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

Ответ принят как подходящий

Попробуйте этот код 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 в расширенном режиме.

Ertuğrul Çetin 28.05.2019 12:28

Какую версию CLJS вы используете? Можете ли вы опубликовать минимальную репродукцию в сути?

Michiel Borkent 28.05.2019 12:40

«1.10.520», но я получаю эту ошибку только в IE 11.

Ertuğrul Çetin 28.05.2019 16:20

Другие вопросы по теме