Я видел эти строки кода в репозитории, и мне было интересно, что означает этот 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 всегда будет класс, к которому он вызывается?
@CertainPerformance Из того, что я вижу, Method1 вызывается только как TestClass.Method1({name: 'jane'}), что заставляет меня задуматься о том, что Cls будет. Я думал, есть ли что-то, чего я не знаю о статических классах в ES6.
В этом случае Cls будет объектом, то есть {name: 'jane'}
@CertainPerformance О .. Когда это обозначается как Method2(Cls, ...args), мы действительно разрушаем ...args из Method1?
@CertainPerformance И если бы это называлось так TestClass.Method1({name: 'jane'}, 'hello'), значит ли это, что Cls в Method2 будет {name: 'jane'}, а args в Method2 будет args[0] = 'hello'?
Никакой деструктуризации, это синтаксис rest/spread. Определение Method2 принимает первый аргумент и помещает его в переменную с именем Cls. Похоже, что второй аргумент не передается, поэтому args в Method2 будет пустым массивом.



![Безумие обратных вызовов в javascript [JS]](https://i.imgur.com/WsjO6zJb.png)


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