Я добавлял функции проверки для моего приложения Node и хотел получить специальное сообщение для поля, которое я предоставляю в этой функции. Проблема в том, что некоторые параметры должны иметь значения по умолчанию, а другие - как параметры.
let field = 'email';
let options = {
'message': '${field} is required'
}
function validation(field, opt = options) {
console.log(opt.message);
}
validation('password');
validation('confirm', {message: 'Confirm password is required'})
Но в этом случае выход
"email is required"
"Confirm password is required"
Хотя я хочу, чтобы результат был
"password is required"
"Confirm password is required"
Я также хочу знать, как Javascript работает для этого кода. Как он получает доступ ко всему материалу и как получить требуемый результат.
Спасибо
В своем коде вы просто создать option
объект и создать его с message
поля = "Требуется адрес электронной почты". И вы никогда не меняете его значение. В качестве альтернативы вы можете генерировать объект каждый раз, когда вы хотите его параметризовать:
const field = 'email';
const getOptions = (field) => ({
'message': '${field} is required'
});
function validation(field, opt) {
opt = opt || getOptions(field);
console.log(opt.message);
}
let field = 'email';
let options = {
'message': '${field} is required'
}
Это присваивает options.message
текущее значение field
. Поскольку вы никогда не меняете свою ценность, вы получаете "email is required"
. Параметр с именем field
в function validation(field, opt = options)
является другой переменной, чем глобальная с тем же именем. И его значение не влияет на значение options.message
поскольку это назначение уже выполнено до того, как функция когда-либо вызывалась.
Манипулирование глобальными объектами считается плохим программированием. Вместо этого вы можете создать объект внутри функции:
function validation(field) {
let opt = {
'message': '${field} is required'
}
console.log(opt.message);
}
message:'${field} is required'
Такой же как:
message: field + " is required"
который непосредственно просматривает field
и приводит к:
message: "email is required"
Для более поздней оценки вы должны использовать функцию, в которой вы передаете имя поля, в котором затем возвращается сообщение:
const options = {
message: field => '${field} is required',
}
function validation(field, opt = options) {
const msg = typeof opt.message === "function" ? opt.message(field) : opt.message;
console.log(msg);
}
validation('password');
validation('confirm', {message: 'Confirm password is required'})