假设我具有以下功能:
function fun(a,b) {
if(a) { //condition can be different
console.log(a);
// some other code
}
if(b) { //condition can be different
console.log(b);
// some other code, not necessary same as above
}
}
现在我知道我可以像这样调用上面的函数了:
fun(1,2) // a=1, b=2
fun() // a=b=undefined
fun(1) // a=1, b=undefined
但是我想做这样的事情:
fun(2) // a=undefined, b=2
我只想传递分配给b而不是a 的一个参数。
在 c#中,可以这样操作:
fun(b: 2) // assign b=2
那么有没有办法在JavaScript中做到这一点?
我想到的一种方法是
而不是传递两个参数,而是传递一个包含参数的对象。
像这样:
function fun(obj) {
if(obj.a) {
console.log(obj.a);
// some other code
}
if(obj.b) {
console.log(obj.b);
// some other code, not necessary same as above
}
}
使用上述方法,我只能传递特定的参数。
但是有什么方法可以在功能中不包含任何修改。
注意:-我不想将null或undefined传递为第一个参数,然后传递第二个参数。
答案 0 :(得分:1)
您在这里可以做的是传递一个选项object
作为function
的参数,您可以在其中将a
和b
指定为keys
为您的options
对象。
有几种JavaScript框架使用相似的方法,尤其是在构建模块时。
这应该是您的功能:
function fun(options) {
if(options.a) { //condition can be different
console.log(options.a);
// some other code
}
if(options.b) { //condition can be different
console.log(options.b);
// some other code, not necessary same as above
}
}
作为通话示例,您可以执行以下操作:
fun({b: 2})
fun({a:1, b: 3})
fun({a: "a string"})
答案 1 :(得分:0)
以下是在不专门分配undefined
值的情况下获得结果的方法:
function fun(obj) {
console.log('a=' + obj.a + ", " + "b=" + obj.b)
};
fun({b: 2});
答案 2 :(得分:0)
您可以为此使用closure
。这样,您就不必修改原始的function
。
function fun(a,b) {
if(a) { //condition can be different
console.log(a);
// some other code
}
if(b) { //condition can be different
console.log(b);
// some other code, not necessary same as above
}
}
function func(a) {
return function(b) {
fun(a,b);
}
}
func()(2);