JavaScript - 创建多个未知参数并将其从字符串传递给函数
JavaScript - Create and Pass Multiple Amount of Unknown Arguments from a String to a Function
我正在创建一个 JavaScript class 来处理 routing/hashing。
我想知道是否有办法将 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");
等...
您可以像这样在函数中捕获参数:
var x = function(){
x = arguments&&arguments[0];
y= arguments&&arguments[1];
console.log(x+y);
};
x(3,4);
7
您可以使用 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) ) ;
我正在创建一个 JavaScript class 来处理 routing/hashing。
我想知道是否有办法将 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");
等...
您可以像这样在函数中捕获参数:
var x = function(){
x = arguments&&arguments[0];
y= arguments&&arguments[1];
console.log(x+y);
};
x(3,4);
7
您可以使用 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) ) ;