通过另一个功能透明地管理功能的参数

时间:2013-01-29 14:21:46

标签: javascript inheritance casting

我正在构建一个由数百个函数组成的相当大的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变量来访问所有函数的参数,但是我希望清理在函数本身的外部发生,到我的函数可能的其他函数中“继承”来自。

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

3 个答案:

答案 0 :(得分:1)

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

无论如何,这是我从同事那里得到的答案。以Jeopardy的方式,我很乐意,如果有人可以改写我的初始问题以匹配我正在寻找的答案,因为我非常确定所得到的Q& A有一些价值。

// 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;
}

谢谢Pascal!

答案 1 :(得分:0)

在函数中使用'arguments'变量。这是......所有论据的清单: - )

function test (a,b) {
   console.log(arguments);
}
test('test','test');

答案 2 :(得分:0)

//传递内部参数对象

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