我正在构建一个由数百个函数组成的相当大的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
变量来访问所有函数的参数,但是我希望清理在函数本身的外部发生,到我的函数可能的其他函数中“继承”来自。
注意:在所有功能中,参数必须保留其原始名称以便于阅读。
答案 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);
}