我正在为我的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是如何工作的。它如何访问所有内容以及如何获取所需的输出。
谢谢
答案 0 :(得分:3)
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);
}
答案 1 :(得分:3)
在您的代码中,您只需创建option
对象,并使用message
field =“ email is required”创建它。而且您永远都不会改变它的价值。或者,您可以在每次参数化时生成对象:
const field = 'email';
const getOptions = (field) => ({
'message': `${field} is required`
});
function validation(field, opt) {
opt = opt || getOptions(field);
console.log(opt.message);
}
答案 2 :(得分:1)
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'})