Javascript 指定要传递的参数

Javascript 指定要传递的参数,javascript,parameter-passing,default-parameters,Javascript,Parameter Passing,Default Parameters,假设我有一个类似于下面的方法,在C#中 我可以像这样指定传递给方法的参数: DoSomething(notify: true); 而不是 DoSomething(false, true); 在Javascript中可能吗?您可以通过传递一个对象来实现类似的功能: 功能剂量测量(参数){ 变量arg1=param.arg1!==未定义?param.arg1:false, notify=参数notify!==未定义?参数notify:false; log('arg1='+arg1+',noti

假设我有一个类似于下面的方法,在C#中

我可以像这样指定传递给方法的参数:

DoSomething(notify: true);
而不是

DoSomething(false, true);

在Javascript中可能吗?

您可以通过传递一个对象来实现类似的功能:

功能剂量测量(参数){
变量arg1=param.arg1!==未定义?param.arg1:false,
notify=参数notify!==未定义?参数notify:false;
log('arg1='+arg1+',notify='+notify);
}

DoSomething({notify:true})这是不可能的,但您可以通过传递对象和添加一些自定义代码来解决它

/**
 * 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中不支持
对象.assign

将对象作为参数传递:

function DoSomething(obj){

 if (obj.hasOwnProperty('arg1')){

  //arg1 isset
 }

 if (obj.hasOwnProperty('notify')){

  //notify isset
 }

}
用法:

DoSomething({
 notify:false
});

ES2015的常见约定是传递、为其属性指定默认值,然后在函数内部使用分解:

const DoSomething = ({ arg1 = false, notify = false } = {}) => {
  /* DO SOMETHING */
};

DoSomething({ notify: true }); // In the function: arg1=false, notify= true

您可以不带任何参数调用此函数,即
DoSomething()
,但这需要对象的默认值(
={}
,位于参数列表的末尾)。

您似乎混淆了Javascript和Java。不,不是。Javascript不支持调用时间命名参数。Javascript中只有一种类型的变量,即
var
@varit05“类型”的变量有
boolean
Number
String
等。关键字
var
的作用不同,ES6中还有更多类似于
const
let
…如果用户通过
{arg1:window.\uu dont\u exist}
,该怎么办?更好的测试是
obj.hasOwnProperty('arg1')
或obj中的
'arg1
谢谢@JuanMendesNever知道
对象。分配
方法!它似乎出现在许多框架中,通常称为“mixin”。那很方便。
const DoSomething = ({ arg1 = false, notify = false } = {}) => {
  /* DO SOMETHING */
};

DoSomething({ notify: true }); // In the function: arg1=false, notify= true