@ChrisMenschenin
Возвысь низкое и унизь высокое.

Как работает this в данном коде?

Здравствуйте.
String.prototype.repeat = function(times) {
  return new Array(times + 1).join(this);
};

alert( "о".repeat(3) );  //ooo

В данном коде на момент вызова repeat создаётся объект String с именем 'о', поэтому this выдаёт о?
Спасибо.
  • Вопрос задан
  • 156 просмотров
Решения вопроса 3
evgeniy8705
@evgeniy8705
Повелитель вселенной
Не создается там объект строки с именем "o".
Создается объект строки со свойством у которого значение равно "o".
String {0: "о", length: 1, [[PrimitiveValue]]: "о"}

При вызове метода, this будет равен этому объекту. А так как метод join должен принимать строковое значение, то this преобразуется в строковое значение "o" при помощи метода toString();
Ответ написан
@Bhudh
При чём тут имя? Массив из пустых строк склеивается через саму строку "о".
Строка и есть this.
Если лезть вглубь, то да, создаётся объект String и вызывается его метод valueOf, который и возвращает эту строку.
Ответ написан
Комментировать
KorniloFF
@KorniloFF Куратор тега JavaScript
Работаю по font-end / JS
Это называется БОКСИНГ.
Когда к примитиву пытаются обратиться как к объекту, броузер создает временный объект с value, содержащим примитив. Происходит обращение к его свойствам / методам, после чего объект удаляется из памяти.
А имени у него никакого нет.
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы