Напиши полифил метода строки startsWith, который появился в ES6, используя только возможности ES5 (без let/const, стрелочных функций и т.д.), то есть через прототипное наследование.

ES5-вариант можно добавить через Object.defineProperty в String.prototype, преобразовав строку и позицию и сравнив нужный фрагмент. Современные Symbol-протоколы он не эмулирует.

Короткий ответ

Что ответить на собеседовании

ES5-вариант можно добавить через Object.defineProperty в String.prototype, преобразовав строку и позицию и сравнив нужный фрагмент. Современные Symbol-протоколы он не эмулирует.

Подробный разбор

Ответ с пояснениями

ES5-вариант можно добавить через Object.defineProperty в String.prototype, преобразовав строку и позицию и сравнив нужный фрагмент. Современные Symbol-протоколы он не эмулирует.

Реализация для ES5-окружения:

if (!String.prototype.startsWith) {
  Object.defineProperty(String.prototype, 'startsWith', {
    configurable: true,
    writable: true,
    value: function (search) {
      'use strict';
      if (this == null) throw new TypeError('null or undefined');
      if (Object.prototype.toString.call(search) === '[object RegExp]') {
        throw new TypeError('RegExp is not supported');
      }
      var text = String(this);
      var part = String(search);
      var position = Number(arguments[1]) || 0;
      var start = Math.min(Math.max(Math.floor(position), 0), text.length);
      return text.slice(start, start + part.length) === part;
    }
  });
}

Метод не перечисляемый; пустой префикс даёт true. Это ES5-совместимый вариант, не полная реализация позднейших правил Symbol.match. Нативный метод не перезаписывается.

ИИ-помощник для собеседований

Хочешь уверенно проходить собеседования?

Попробуй ИИ-помощник для собеседований: слышит вас и собеседника, анализирует экран, подсказывает ответы в реальном времени, работает без VPN и не попадает в захват экрана.

Подробнее