JavaScript - 从字符串到函数创建并传递多个未知参数

时间:2016-04-08 20:42:59

标签: javascript function arguments url-routing window.location

我正在创建一个处理路由/散列的JavaScript类。

我想知道是否有办法将 window.location.hash 字符串拆分为一组参数以传递给另一个函数。

哈希示例:

var hash = "#some/place?id=42&&name=Brian";

当然,我可以拆分字符串并获取参数及其值,但是我如何将这些传递给函数,类似于(给定前一个散列)调用:

// ID, NAME
someFunction(42, "Brian");

我们必须考虑到我们不知道我们将要处理的论点的确切数量。我们所知道的是哈希中的参数与函数期望的顺序相同;例如:给定前面的例子,我们的函数将首先接收:ID,然后是NAME,然后是我们传递的任何其他参数。

因此...

var hash = "#some/place?id=42&&name=Brian";

// ID, NAME
someFunction(42, "Brian");

或者...

var hash = "#some/place?id=42&&age=33&&name=Brian";

// ID, AGE, NAME
someFunction(42, 33, "Brian");

等...

2 个答案:

答案 0 :(得分:1)

你可以在这样的函数中捕获参数:

var x = function(){

x = arguments&&arguments[0];
y= arguments&&arguments[1];
console.log(x+y);

};
x(3,4);
7

答案 1 :(得分:0)

您可以使用Function.prototype.apply()方法为函数提供参数列表。第一个参数集为函数设置“this”绑定,因此对于不在对象范围内操作的函数,可以将null作为第一个参数传递。

var hash = "#some/place?id=42&&age=33&&name=Brian";

var getParams = function(hash){

  var parameters = [ ["id=","&&age"],["age=","&&name"],["name=",null] ];

  return parameters.map(function(p){

    var re1 = new RegExp(p[0]);
    var re2 = p[1]? new RegExp(p[1]): null;

    var start = hash.match(re1)['index'] + p[0].length;
    var end = re2 ? hash.match(re2)["index"]: hash.length;

    return hash.slice(start,end);

  })

};

function interpreter(id,age,name,kwargs){
  console.log( "id: "+id + " age: "+ age+ " name: "+name+ " kwargs: "+ kwargs );
}

interpreter.apply( null, getParams(hash) ) ;