Вы вообще не принимаете никаких параметров в buildUrl
. Похоже, вы хотите принять один параметр, который вы деструктурируете, и предоставить различные значения по умолчанию. Это выглядит так:
buildUrl({parm1 = PARM_1, parm2 = PARM_2, parm3: this.parm3, parm4: this.parm4} = {}) {
return `things?parm1=${parm1}&parm2=${parm2}&parm3=${parm3}&parm4=${parm4}`;
}
Или с большим количеством разрывов строк:
buildUrl({
parm1 = PARM_1,
parm2 = PARM_2,
parm3: this.parm3,
parm4: this.parm4
} = {}) {
return `things?parm1=${parm1}&parm2=${parm2}&parm3=${parm3}&parm4=${parm4}`;
}
Эта часть является деструктурируемой:
{parm1 = PARM_1, parm2 = PARM_2, parm3: this.parm3, parm4: this.parm4}
... которая обрабатывает предоставление значения по умолчанию для любых свойств, не предоставленных вызывающей стороной.
Эта часть делает весь параметр необязательным, предоставляя для него значение по умолчанию:
= {}
Это заставляет buildUrl()
работать, используя все значения по умолчанию , (Общий анонимный параметр по умолчанию равен {}
, тогда все деструктурированные параметры получают свои значения по умолчанию, потому что {}
не имеет свойств для них.) Без этого общего значения по умолчанию вам придется использовать buildUrl({})
.
Примечание: параметры запроса (как имя, так и значение) должны быть в кодировке URI. Ваш код этого не делает. В именах ваших параметров нет символов, нуждающихся в кодировке, поэтому вы можете их пропустить (но вы можете сделать это в случае, если вы измените их позже), но значения, вероятно, изменяются и требуют кодировки.
buildUrl({
parm1 = PARM_1,
parm2 = PARM_2,
parm3: this.parm3,
parm4: this.parm4
} = {}) {
// Ensures order (on up-to-date JavaScript engines) and gives us an object to use
const params = {parm1, parm2, parm3, parm4};
return "things?" + Object.entries(params).map(([key, value]) => `encodeURIComponent(key)=encodeURIComponent(value)`).join("&");
}
(Да, порядок действительно гарантирован при условии, что ни одно из имен параметров не содержит всех цифр. Это было частично гарантировано ES2015, и теперь ES2020 расширяет это до Object.entries
и других, потому что это то, что в любом случае делают все основные двигатели JavaScript. )
Или, конечно:
buildUrl({
parm1 = PARM_1,
parm2 = PARM_2,
parm3: this.parm3,
parm4: this.parm4
} = {}) {
return "things" +
`?parm1=${encodeURIComponent(parm1)}` +
`&parm2=${encodeURIComponent(parm2)}` +
`&parm3=${encodeURIComponent(parm3)}` +
`&parm4=${encodeURIComponent(parm4)}`;
}
Или используйте URLSearchParams, так как nirazul покажет вам .