2

我正在构建一个由数百个函数组成的相当大的 JavaScript 库。每个函数都有一定数量的参数,有时在设计时是未知的。我需要通过某种参数cleanUp()函数来传递每个函数参数。我可以做这样的事情:

function myFunction(param1, param2, ..., paramN) {
  var param1 = cleanUp(param1);
  var param2 = cleanUp(param2);
  ...
  var paramN = cleanUp(paramN);

  // Function's implementation goes here
}

function cleanUp(param) {
  // Cleanup code goes here
  return cleanParam;
}

但这会非常冗长和重复(请记住,我有数百个这样的函数)。

我的问题是:通过函数透明地传递所有函数参数的最佳方式是什么cleanUp,无论是继承,还是更合适的方式。我知道我可以使用该arguments变量来访问所有函数的参数,但我希望清理发生在函数本身之外,进入我的函数可以“继承”的其他函数。

注意:在所有函数中,为便于阅读,参数必须保留其原始名称。

4

3 回答 3

1

我想我没有正确表达我的问题,但我仍然不确定如何改进它。

无论如何,这是我从同事那里得到的答案。以危险的方式,如果有人可以改写我最初的问题以匹配我正在寻找的答案,我会很高兴,因为我很确定由此产生的问答具有一定的价值。

// Parameter cleanup function
function cleanUp(param) {
  // Cleanup code goes here
  return cleanParam;
}

// Implementation of one of the hundreds of functions in the library
function _myFunction(param1, param2, ..., paramN) {
  // Function's implementation goes here
}

// Proxy of one of these functions with clean parameters
function myFunction = makeProxy(_myFunction);

// Utility function to create a proxies for the library functions
function makeProxy(fn) {
  function proxy() {
    var cleanParams = [];
    for (var i = 0; i < arguments.length; i++) {
      cleanParams.push(cleanUp(arguments[i]));
    }
    return fn.apply(this, cleanParams);
  }
  return proxy;
}

谢谢帕斯卡!

于 2013-01-29T20:34:07.193 回答
0

在函数中使用“参数”变量。这是一个......好吧......所有论点的列表:-)

function test (a,b) {
   console.log(arguments);
}
test('test','test');
于 2013-01-29T14:25:16.213 回答
0

//传递内部参数对象

function myFunction(param1, param2, ..., paramN) {
  var paramters = cleanUp(arguments);
}
于 2013-01-29T14:25:40.073 回答