Является ли первый параметр статического метода ссылкой на класс, для которого он вызывается?

Я видел эти строки кода в репозитории, и мне было интересно, что означает этот Cls в Method2?

   class TestClass {
      static Method1(...args) {
        return TestClass.Method2(...args);
      }

      static async Method2(Cls, ...args) {
        Cls.someStuff();
      }
    }

Ничего не передается как Cls в Method2 из Method1, на что это Cls ссылается в данном случае?

Я предполагаю, что Cls будет TestClass, но я не уверен, действительно ли это тот случай, когда первым параметром Method2 всегда будет класс, к которому он вызывается?

Все зависит от того, как вызывается Method1, чего здесь нет в коде. Независимо от кода, первым параметром будет сам класс странный, потому что вместо этого вы можете ссылаться на класс с помощью this. Также похоже, что у TestClass нет метода someStuff (статического или иного)

CertainPerformance 28.07.2019 09:30

@CertainPerformance Из того, что я вижу, Method1 вызывается только как TestClass.Method1({name: 'jane'}), что заставляет меня задуматься о том, что Cls будет. Я думал, есть ли что-то, чего я не знаю о статических классах в ES6.

Carven 28.07.2019 09:38

В этом случае Cls будет объектом, то есть {name: 'jane'}

CertainPerformance 28.07.2019 09:39

@CertainPerformance О .. Когда это обозначается как Method2(Cls, ...args), мы действительно разрушаем ...args из Method1?

Carven 28.07.2019 09:41

@CertainPerformance И если бы это называлось так TestClass.Method1({name: 'jane'}, 'hello'), значит ли это, что Cls в Method2 будет {name: 'jane'}, а args в Method2 будет args[0] = 'hello'?

Carven 28.07.2019 09:42

Никакой деструктуризации, это синтаксис rest/spread. Определение Method2 принимает первый аргумент и помещает его в переменную с именем Cls. Похоже, что второй аргумент не передается, поэтому args в Method2 будет пустым массивом.

CertainPerformance 28.07.2019 09:48
Поведение ключевого слова "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
6
45
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

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

В Method1синтаксис остальных параметров собирает все параметры, переданные методу, и помещает их в массив с именем args. Затем он вызывает второй метод с теми же аргументами по распространениеargs.

Method2 получает первый аргумент, переданный в отдельную переменную, и собирает остальные аргументы, переданные в переменную с именем args.

class TestClass {
  static Method1(...args) {
    console.info("Method 1 args: ", args) // ["arg 1", "arg 2", "arg 3"]
    return TestClass.Method2(...args);
  }

  static Method2(Cls, ...args) {
    console.info("Cls: ", Cls); // "arg 1"
    console.info("Method 2 args: ", args) // ["arg 2", "arg 3"]
  }
}

TestClass.Method1("arg 1", "arg 2", "arg 3")

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