ES5-вариант можно добавить через Object.defineProperty в String.prototype, преобразовав строку и позицию и сравнив нужный фрагмент. Современные Symbol-протоколы он не эмулирует.
Напиши полифил метода строки startsWith, который появился в ES6, используя только возможности ES5 (без let/const, стрелочных функций и т.д.), то есть через прототипное наследование.
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. Нативный метод не перезаписывается.