@web-quest3

Непонятно работа js разъясните пожалуйста?

<!DOCTYPE html>
<html>

<body>
  <script>
    'use strict';
    String.prototype.repeat = function(times) {
      return new Array(times+1).join(this);
    };
    
    alert( "ля".repeat(3) ); // ляляля
  </script>
</body>

</html>

Почему выводит 3 ля вместо 4?

Object.prototype.each = function(f) {
  for (var prop in this) {
    var value = this[prop];
    f.call(value, prop, value); // вызовет f(prop, value), this=value
  }
}
 f.call(value, prop, value); передано 3 аргумента а вызовет 2, вообще не понятно как работает это.
  • Вопрос задан
  • 241 просмотр
Решения вопроса 1
@DarkSir
new Array(times+1) возвращает пустой массив, который в вашем случае будет длиной 4. То-есть грубо говоря он должен 4 переменных содержать, но их нет. join(this) соединяет массив в строку с указанием разделителя. То-есть у вас 4 пустых переменных в строку соединяется между собой тремя ля. Пример:
['Первый', 'Второй', 'Третий', 'Четвертый'].join('-') // Получим 'Первый-Второй-Третий-Четвертый'


f.call(value, prop, value); // вызовет f(prop, value), this=value

А как ещё должно быть? Первый аргумент это контекст, то-есть this. Остальные аргументы идут в функцию.
Ответ написан
Комментировать
Пригласить эксперта
Ответы на вопрос 1
kulakoff
@kulakoff
Vue.js developing
Почему выводит 3 ля вместо 4?


В метод join подается разделитель. В данном случае это "ля". Если элементов в массиве 4, то разделителей, которые объединят элементы этого массива в строку будет три.
Ответ написан
Комментировать
Ваш ответ на вопрос

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

Войти через центр авторизации
Похожие вопросы