2

これは、この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の 2 番目のインスタンスでは、undefined渡さなかったbので、b の現在の値を渡した 3 番目のインスタンスを使用して回避する必要があったことに注意してください。

b値を渡す必要がない場合、たとえば、この場合の値の値aを渡す必要がないようにする方法はcありbますか?

4

2 に答える 2

2

以下のようなものがうまくいくかもしれません:

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);
});
于 2013-08-01T20:11:43.473 に答える