请考虑我在C#中使用如下方法。
void DoSomething(bool arg1 = false, bool notify = false)
{ /* DO SOMETHING */ }
我可以指定我传递给方法的参数如下:
DoSomething(notify: true);
而不是
DoSomething(false, true);
可以在Javascript中使用吗?
答案 0 :(得分:2)
ES2015的通用约定是传递an object as a single argument,为其属性分配默认值,而不是在函数内使用解构:
const DoSomething = ({ arg1 = false, notify = false } = {}) => {
/* DO SOMETHING */
};
DoSomething({ notify: true }); // In the function: arg1=false, notify= true
你可以在没有任何参数的情况下调用这个函数,即DoSomething()
,但是这需要对象的默认值(参数列表末尾的= {}
)。
答案 1 :(得分:1)
你可以通过传递一个对象来实现类似的东西:
function DoSomething(param) {
var arg1 = param.arg1 !== undefined ? param.arg1 : false,
notify = param.notify !== undefined ? param.notify : false;
console.log('arg1 = ' + arg1 + ', notify = ' + notify);
}
DoSomething({ notify: true });
答案 2 :(得分:1)
这是不可能的,但你可以通过传递对象并添加一些自定义代码来解决它
/**
* This is how to document the shape of the parameter object
* @param {boolean} [args.arg1 = false] Blah blah blah
* @param {boolean} [args.notify = false] Blah blah blah
*/
function doSomething(args) {
var defaults = {
arg1: false,
notify: false
};
args = Object.assign(defaults, args);
console.log(args)
}
doSomething({notify: true}); // {arg1: false, notify: true}
你可以概括一下这个
createFuncWithDefaultArgs(defaultArgs, func) {
return function(obj) {
func.apply(this, Object.assign(obj, defaultArgs);
}
}
var doSomething = createFuncWithDefaultArgs(
{arg1: false, notify: false},
function (args) {
// args has been defaulted already
}
);
请注意,IE you may need a polyfill
不支持Object.assign
答案 3 :(得分:0)
将对象作为参数传递:
function DoSomething(obj){
if (obj.hasOwnProperty('arg1')){
//arg1 isset
}
if (obj.hasOwnProperty('notify')){
//notify isset
}
}
用法:
DoSomething({
notify:false
});