javascript - Javascript 中的命名参数不会覆盖现有值

标签 javascript named-parameters

这是我从 Named parameters in javascript 得到的代码:

var parameterfy = (function () {
    var pattern = /function[^(]*\(([^)]*)\)/;

    return function (func) {
       // fails horribly for parameterless functions ;)
       var args = func.toString().match(pattern)[1].split(/,\s*/);

       return function () {
           var named_params = arguments[arguments.length - 1];
           if (typeof named_params === 'object') {
              var params = [].slice.call(arguments, 0, -1);
              if (params.length < args.length) {
                  for (var i = params.length, l = args.length; i < l; i++) {
                      params.push(named_params[args[i]]);
                  }
                  return func.apply(this, params);
              }
           }
           return func.apply(null, arguments);
       };
     };
}());

var myObject = {
    first: "",
    second: "",
    third: ""
};

var foo = parameterfy(function (a, b, c) {
        //console.log('a is ' + a, ' | b is ' + b, ' | c is ' + c);
        myObject.first = a;
        myObject.second = b;
        myObject.third = c;
        console.log("first " + myObject.first + " second " + myObject.second + " third " + myObject.third);
});


foo(1, 2, 3); // gives 1, 2, 3
foo({a: 11, c: 13}); // gives 11, undefined, 13
foo({ a: 11, b:myObject.second, c: 13 });  // in order to avoid undefined, this is 

请注意,在 foo 的第二个实例中,我得到了 undefined 因为我没有传递 b 所以我必须使用我传递了 b 的当前值的第三个实例。

是否有办法做到这一点,以便如果我不必传递值,例如在本例中传递 b 的值,以便它仍然更新 的给定值ac 但保留 b 的值?

最佳答案

像下面这样的东西可能会起作用:

var foo = parameterfy(function (a, b, c) {
    //console.log('a is ' + a, ' | b is ' + b, ' | c is ' + c);
    if(typeof a != 'undefined'){myObject.first = a;}
    if(typeof b != 'undefined'){myObject.second = b;}
    if(typeof c != 'undefined'){myObject.third = c;}
    console.log("first " + myObject.first + " second " + myObject.second + " third " + myObject.third);
});

关于javascript - Javascript 中的命名参数不会覆盖现有值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18003557/

相关文章:

javascript - 我在使用 html 连接 js 文件时遇到问题

python - 使用 Python C API 命名参数?

java - 即使存在,Hibernate 也无法找到命名参数

javascript - Document.querySelector 返回 null 直到使用 DevTools 检查元素

javascript - JavaScript 中的目标元素

c# - 方法重载还是更优雅的东西?

string - Scala 字符串格式命名参数(Winner : Ugliest Code)

c++ - 使用 C++ 命名参数习语的更好方法?

javascript - Appcelerator 中的自定义选项卡栏 - 如何返回根窗口?

javascript - 在(目标)div 内居中 spin.js 微调器